问题描述
我需要使用 sjlabelled::set_labels 标记许多变量中的值。这是一个可重现的示例以及已经有效的示例:
library(data.table)
library(sjlabelled)
lookup <- data.table(id = paste0("q",1:5),answers = paste(paste0("atext",paste0("btext",paste0("ctext",sep = ";"))
data <- data.table(q1 = sample(1:3,10,replace = TRUE),q2 = sample(1:3,q3 = sample(1:3,q4 = sample(1:3,q5 = sample(1:3,replace = TRUE))
data$q1 <- set_labels(data$q1,labels = unlist(strsplit(lookup[id == "q1",answers],split = ";")))
get_labels(data$q1)
因此,不同答案(=值)的标签由分号分隔。如果我通过 id 调用变量,我可以让它工作,但是正如您在示例代码中看到的那样,但是如果我想“循环”所有变量,我正在努力完成任务。
目标是能够将数据表(或数据框)导出为 SPSS 文件。如果它适用于其他软件包,我也会很高兴。
解决方法
将 data
的列名与 id
匹配,在 answers
上拆分 ;
并将标签作为列表传递。
library(sjlabelled)
data <- set_labels(data,labels = strsplit(lookup$answers[match(names(data),lookup$id)],';'))
get_labels(data)
#$q1
#[1] "atext1" "btext1" "ctext1"
#$q2
#[1] "atext2" "btext2" "ctext2"
#$q3
#[1] "atext3" "btext3" "ctext3"
#$q4
#[1] "atext4" "btext4" "ctext4"
#$q5
#[1] "atext5" "btext5" "ctext5"