我正在努力处理 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
但不分配变量标签。如果我尝试将它分配给一个新对象,它只包含变量标签的值作为向量。