Назначьте метки переменных в цикле
У меня есть большой старый набор данных, который я хочу программно пометить. Для этого я использовал
look_for()
функция от
labelled
пакет для создания df переменных и меток, которые я хочу перебрать, чтобы присвоить метки моим переменным. Ниже приведен простой пример:
library(labelled)
# create table of vars and add some labels
vlabels <- labelled::look_for(mtcars) %>%
mutate(label = paste0("label for ", variable))
vlabels содержимое:
> vlabels
pos variable label col_type values
1 mpg label for mpg dbl
2 cyl label for cyl dbl
3 disp label for disp dbl
4 hp label for hp dbl
5 drat label for drat dbl
6 wt label for wt dbl
7 qsec label for qsec dbl
Попытка присвоить ярлыки:
for(v in length(vlabels$variable)){
var = vlabels$variable[v]
vlabel = vlabels$label[v]
attr(mtcars[var], 'label') <- vlabel
}
Проверяю вывод и мои ярлыки не появляются:
attr(mtcars$mpg, 'label')
> attr(mtcars$mpg, 'label')
NULL
Не уверен, что мне здесь не хватает, кроме того, что петли плохие, и я должен использовать apply. Спасибо!
1 ответ
Вы могли бы использовать
var_label
:
library(labelled)
var_label(mtcars) <- paste0("label for ", colnames(mtcars))
var_label(mtcars)
$mpg
[1] "label for mpg"
$cyl
[1] "label for cyl"
$disp
[1] "label for disp"
...
Вы также можете назначить метки для каждого столбца индивидуально:
var_label(mtcars$mpg) <- "Specific label for mpg"
var_label(mtcars)
var_label(mtcars)
$mpg
[1] "Specific label for mpg"
$cyl
NULL
$disp
NULL
...
Что приводит к вашему исходному циклу:
for(v in 1:length(vlabels$variable)){
var = vlabels$variable[v]
vlabel = vlabels$label[v]
var_label(mtcars[[var]])<-vlabel
}
var_label(mtcars)
$mpg
[1] "label for mpg"
$cyl
[1] "label for cyl"
$disp
[1] "label for disp"
...