将 sjlabelled::set_labels 用于查找 table
Use sjlabelled::set_labels with lookup table
我需要用 sjlabelled::set_labels 标记很多变量中的值。这是一个可重现的例子和已经有效的例子:
library(data.table)
library(sjlabelled)
lookup <- data.table(id = paste0("q", 1:5),
answers = paste(paste0("atext", 1:5), paste0("btext", 1:5)
, paste0("ctext", 1:5), sep = ";"))
data <- data.table(q1 = sample(1:3, 10, replace = TRUE),
q2 = sample(1:3, 10, replace = TRUE),
q3 = sample(1:3, 10, replace = TRUE),
q4 = sample(1:3, 10, replace = TRUE),
q5 = sample(1:3, 10, 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"
我需要用 sjlabelled::set_labels 标记很多变量中的值。这是一个可重现的例子和已经有效的例子:
library(data.table)
library(sjlabelled)
lookup <- data.table(id = paste0("q", 1:5),
answers = paste(paste0("atext", 1:5), paste0("btext", 1:5)
, paste0("ctext", 1:5), sep = ";"))
data <- data.table(q1 = sample(1:3, 10, replace = TRUE),
q2 = sample(1:3, 10, replace = TRUE),
q3 = sample(1:3, 10, replace = TRUE),
q4 = sample(1:3, 10, replace = TRUE),
q5 = sample(1:3, 10, 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"