使用 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" = 1
和 values1 = 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)))
我正在使用 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" = 1
和 values1 = 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)))