gpt4 book ai didi

R:分配数据框列的变量标签

转载 作者:行者123 更新时间:2023-12-02 08:33:19 24 4
gpt4 key购买 nike

我正在努力处理 data.frame 列的变量标签。假设我有以下数据框(更大数据框的一部分):

data <- data.frame(age = c(21, 30, 25, 41, 29, 33), sex = factor(c(1, 2, 1, 2, 1, 2), labels = c("Female", "Male")))
#

我还有一个命名向量,其中包含该数据框的变量标签:

var.labels <- c(age = "Age in Years", sex = "Sex of the participant")

我想分配 var.labels 中的变量标签到数据框中的列data使用函数label来自Hmisc包裹。我可以像这样一项一项地完成,然后检查结果:

> label(data[["age"]]) <- "Age in years"
> label(data[["sex"]]) <- "Sex of the participant"
> label(data)
age sex
"Age in years" "Sex of the participant"

变量标签被指定为列的属性:

> attr(data[["age"]], "label")
[1] "Age in years"
> attr(data[["sex"]], "label")
[1] "Sex of the participant"

太棒了。但是,对于较大的数据框(例如 100 列或更多列),这将不方便或高效。另一种选择是直接将它们分配为属性:

> attr(data, "variable.labels") <- var.labels

没有帮助。变量标签未分配给列:

> label(data)
age sex
"" ""

相反,它们被分配为数据框本身的属性(请参阅列表的最后一个组件):

> attributes(data)
$names
[1] "age" "sex"

$row.names
[1] 1 2 3 4 5 6

$class
[1] "data.frame"

$variable.labels
age sex
"Age in Years" "Sex of the participant"

这不是我想要的。我需要变量标签作为列的属性。我尝试编写以下函数(以及许多其他函数):

set.var.labels <- function(dataframe, label.vector){
column.names <- names(dataframe)
dataframe <- mapply(label, column.names, label.vector)
return(dataframe)
}

然后执行它:

> set.var.labels(data, var.labels)

没有帮助。它返回向量 var.labels 的值但不分配变量标签。如果我尝试将它分配给一个新对象,它只包含变量标签的值作为向量。

最佳答案

您可以通过从 var.labels 的命名向量创建一个列表并将其分配给 label 值来实现此目的。我使用 match 来确保 var.labels 的值分配给 data 中相应的列,即使 的顺序也是如此var.labelsdata 列的顺序不同。

library(Hmisc)

var.labels = c(age="Age in Years", sex="Sex of the participant")

label(data) = as.list(var.labels[match(names(data), names(var.labels))])

label(data)
age sex
"Age in Years" "Sex of the participant"

原始答案

我原来的答案使用了lapply,这实际上是没有必要的。以下是出于存档目的的原始答案:

您可以使用lapply分配标签:

label(data) = lapply(names(data), function(x) var.labels[match(x, names(var.labels))])

lapply 将函数应用于列表或向量的每个元素。在这种情况下,该函数应用于 names(data) 的每个值,并从 var.labels 中挑选出与 当前值相对应的标签值名称(数据)

阅读一些教程是了解总体思路的好方法,但如果您开始在不同情况下使用 lapply 并了解它的行为方式,您就会真正掌握它的窍门。

关于R:分配数据框列的变量标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27347548/

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