我正在努力处理data.frame列的变量标签。说我有一个数据帧,因为这(更大的数据帧的一部分):R:分配数据帧列的变量标签
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
的值,但不分配变量标签。如果我尝试将它分配给一个新对象,它只包含变量标签的值作为一个向量。
@ eipi10:非常感谢你!有用!这完全是我所需要的。使用'apply'函数族时,我在理解索引时遇到了问题。有没有我可以阅读的指南,或者这是一个经验问题? – panman 2014-12-07 21:39:21
关于'lapply'的简要教程,[this](http://rollingyours.wordpress.com/category/r-programming-apply-lapply-tapply/)和[this](https://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r /)可能会有帮助。我还为我的答案增加了一些解释。 – eipi10 2014-12-08 05:34:27