【发布时间】:2015-02-05 11:48:23
【问题描述】:
我正在努力处理 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")
我想使用Hmisc 包中的函数label 将var.labels 中的变量标签分配给数据框data 中的列。我可以像这样一个一个地做,然后检查结果:
> 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 的值,但不分配变量标签。如果我尝试将它分配给一个新对象,它只包含变量标签的值作为向量。
【问题讨论】:
标签: r dataframe labels assign hmisc