使用 haven::labelled 动态创建值标签

Dynamically create value labels with haven::labelled

我正在使用 haven::labelled 设置变量的值标签。目标是创建一个完整记录的数据集,我可以将其导出到 SPSS。

现在,假设我有一个 df value_labels 值及其值标签。我也有我 df df_data 和我想为其分配值标签的变量。

value_labels <- tibble(
  value = 1:6,
  labels = paste0("value", 1:6)
)

df_data <- tibble(
  id = 1:10, 
  var = floor(runif(10, 1, 6))
)

我会手动为 df_data$var 创建值标签,如下所示:

df_data$var <- haven::labelled(df_data$var, labels = c(values1 = 1, values2 =  2, values3 = 3, values4 = 4, values5 = 5, values6 = 6))

但是由于我有超过 16 个数据集和近 7000 列,我需要一种更动态的方式来分配值标签。请注意,据我了解,"values1" = 1values1 = 1(引号)之间存在差异,具体取决于变量 class。

请注意,我使用 haven::labelled 因为这是唯一的方法,到目前为止,我已经能够成功导出带有值标签的 .sav 文件。我试过 sjlabelled,但没有成功。

我们可以 deframe 'value_labels',将其用作 labelled 函数

中的 labels 参数
library(dplyr)
library(tibble)
df_data %>%
     mutate(var = haven::labelled(var, labels = deframe(value_labels[2:1])))

如果有更多列,则使用mutate_at

df_data %>%
     mutate_at(vars(var), ~ haven::labelled(., labels = deframe(value_labels[2:1])))

对于多个数据集,将它们放在 list 中并使用 map 遍历 list 并立即应用

library(purrr)
keyval <- deframe(value_labels[2:1])
list(df_data, df_data) %>%
    map( ~
          .x %>%
             mutate_at(vars(var), ~ haven::labelled(., labels = 
             keyval)))