Я борюсь с переменными метками столбцов 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")
То, что я хочу сделать заключается в назначении меток переменных в 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
, но не присваивает метки переменных. Если я попытаюсь назначить его новому объекту, он просто будет содержать значения меток переменных в качестве вектора.
@ eipi10: Большое спасибо! Оно работает! Это ТОЧНО, что мне нужно. У меня проблемы с пониманием индексации при работе с семейством функций «apply». Есть ли какой-нибудь путеводитель, который я мог бы прочитать, или это вопрос опыта? – panman
Для кратких руководств по '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