我正在努力處理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