【问题标题】:Dynamically create value labels with haven::labelled, follow-up使用have::labelled动态创建价值标签,跟进
【发布时间】:2019-12-17 14:36:18
【问题描述】:

Dynamically create value labels with haven::labelled 提出后续问题,其中akrun 使用deframe 提供了一个很好的答案。

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

现在,假设我有一个 df value_labels 值及其值标签。我还有一个 df df_data ,其中包含我想要为其分配值标签的变量。

value_labels <- tibble(
  value = c(seq(1:6), seq(1:3), NA),
  labels = c(paste0("value", 1:6),paste0("value", 1:3), NA),
  name = c(rep("var1", 6), rep("var2", 3), "var3")
)


df_data <- tibble(
  id = 1:10, 
  var1 = floor(runif(10, 1, 7)),
  var2 = floor(runif(10, 1, 4)), 
  var3 = rep("string", 10)
)

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

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

df_data$var2 <- haven::labelled(df_data$var, labels = c(values1 = 1, values2 =  2, values3 = 3))

我需要一种更动态的方式来将正确的值标签分配给大型数据集中的正确变量。该解决方案还需要忽略character 向量,因为我不希望这些具有值标签。因此,value_labels 中的var3 被列为NA

解决方案不需要处理列表中的多个数据集。

【问题讨论】:

  • 我使用的数据集有字符向量。在这个例子中df_data$var3。这些字符向量包含长字符串 (cmets)。从逻辑上讲,这些不能有价值标签。但是将字符向量保留在最终数据集中很重要。让我知道是否可以进一步澄清。
  • 你能检查下面发布的解决方案
  • 工作就像一个魅力。谢谢!

标签: r r-haven


【解决方案1】:

这是一个选项,我们在删除 NA 行后,split 用 'name' 命名的 'value/labels',使用 list 的名称来子集 'df_data' 的列,应用labelled 并将其分配回相同的列

lbls2 <- na.omit(value_labels)
lstLbls <- with(lbls2, split(setNames(value, labels), name))
df_data[names(lstLbls)] <- Map(haven::labelled, 
          df_data[names(lstLbls)], labels = lstLbls)
df_data
# A tibble: 10 x 4
#      id       var1       var2 var3  
#   <int>  <dbl+lbl>  <dbl+lbl> <chr> 
# 1     1 2 [value2] 2 [value2] string
# 2     2 5 [value5] 2 [value2] string
# 3     3 4 [value4] 1 [value1] string
# 4     4 1 [value1] 2 [value2] string
# 5     5 1 [value1] 1 [value1] string
# 6     6 6 [value6] 2 [value2] string
# 7     7 1 [value1] 3 [value3] string
# 8     8 1 [value1] 1 [value1] string
# 9     9 3 [value3] 3 [value3] string
#10    10 6 [value6] 1 [value1] string

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多