Назначьте метки переменных в цикле

У меня есть большой старый набор данных, который я хочу программно пометить. Для этого я использовал 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"
...
Другие вопросы по тегам