0

我有一个大的旧数据集,我想以编程方式标记。为此,我使用了包中的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。谢谢!

4

1 回答 1

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"
...
于 2021-05-04T16:54:46.140 回答