gpt4 book ai didi

r - data.frames 上 R Hmisc 包列 "labels"的替代方案

转载 作者:行者123 更新时间:2023-12-04 11:54:18 28 4
gpt4 key购买 nike

我处理数据,其中大多数标题名称都是很长的字符串。这些是神秘的,但包含不能忘记的重要细节。由于各种显示原因以及编程原因,长列名难以使用。为了帮助解决这个问题,我通常将原始列名称保留为 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 现在由“标记”类组成,并包含字符向量,尽管我的数据本质上是数字。转换为数字甚至子集 myDF 将导致标签被删除。有人有更好的建议吗?特别是我需要对数据进行子集化,而且我还发现按数字索引很笨拙且容易出错。

由于相对于 RAM 的大量数据,我无法同时保留数字和“标记”data.frames 的副本。我还尝试使用 hash 包创建散列对象:
library(hash)
myHash <- hash(colnames(myDF), label(myDF))

或通过列表:
nameList <- list()
for(name in colnames(myDF)) {
nameList[[name]] <- label(myDF)[name]
}

但是......我也发现这些不令人满意,主要是因为它们在各种操作后可能与 myDF 不同步,并且它们不能从同一个对象访问。也许我只是需要更加勤奋。

最后,我认为一个解决方案可能是一个包含 data.frame 和其他一些数据结构的自定义类,以了解非常无意义的简洁名称、冗长且非唯一的昵称以及真正的变量名称。但这将需要重载所有索引运算符 & 可能超出我的技能明智。

那么任何其他有目的的解决方案?任何帮助表示赞赏。

最佳答案

您可以在此处采用关系数据库类型的方法。创建一个单独的 data.frame 来表达缩写名称和长名称之间的关联。

library(Hmisc)
myDF <- read.csv("someFile.csv")
LongNames <- colnames(myDF)
colnames(myDF) <- paste0("V", 1:ncol(myDF))
ShortNames <- colnames(myDF)
NameTable <- cbind(LongNames, ShortNames)

即使您的数据稍后被操纵,变量的短名称和长名称之间的关联也应保持不变。当然,每次创建需要长名称的新变量时,都需要向 NameTable 添加新行,但无论如何都需要将该长名称放在某处。

要使用短名称轻松检索长名称,您可以为此目的定义一个函数。
L = function(x){NameTable[which(ShortNames == x),1]}
L(V3) #gives long name of V3

关于r - data.frames 上 R Hmisc 包列 "labels"的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28838723/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com