我处理大多数标题名称都是非常长的字符串的数据。这些是神秘的,但包含不能忘记的重要细节。由于各种显示原因以及编程原因,长列名称难以使用。为了解决这个问题,我通常将原始列名保留为 Hmisc 标签,并用 V1、V2、V3 等无信息名称重命名列,或者使用一些截断的(但仍然很长且通常不是唯一的)版本的长名称.
library(Hmisc)
myDF <- read.csv("someFile.csv")
myLabels <- colnames(myDF)
label(myDF, self=FALSE) <- myLabels
colnames(myDF) <- paste0("V", 1:ncol(myDF))
我现在可以使用短名称 V 并且仍然查找标签以获取原始名称。然而,这仍然不能令人满意...... myDF 现在由“labelled”类组成,并且包含字符向量,尽管我的数据本质上是数字的。转换为数字甚至子集 myDF 将导致标签被丢弃。有人有更好的建议吗?特别是我需要对数据进行子集化,并且我还发现按数字索引很笨拙且容易出错。
由于相对于 RAM 的大量数据,我无法同时保留数字和“标记”数据帧的副本。我还尝试使用 hash 包创建散列对象:
library(hash)
myHash <- hash(colnames(myDF), label(myDF))
或通过列表:
nameList <- list()
for(name in colnames(myDF)) {
nameList[[name]] <- label(myDF)[name]
}
但是......我也发现这些不令人满意,主要是因为它们在各种操作后可能与 myDF 不同步,并且无法从同一个对象访问它们。也许我只是需要更加勤奋。
最后,我认为也许一个解决方案是一个自定义类,它包含一个 data.frame 和一些其他数据结构,以了解非常无意义的简洁名称、冗长和非唯一的昵称以及真正的变量名称。但这需要重载所有索引运算符,并且可能超出我的技能范围。
那么还有其他有目的的解决方案吗?任何帮助表示赞赏。