Я борюсь с переменными метками столбцов 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
, но не назначает метки переменных. Если я попытаюсь назначить его новому объекту, он просто содержит значения меток переменных в качестве вектора.