R语言 合并data.table中的值

qncylg1j  于 2023-06-27  发布在  其他
关注(0)|答案(3)|浏览(164)

我有一个大型数据集,其中包含不同的列,这些列表示调查问卷中的问题:

dt <- data.table(q32_1 = c(1, 2, 3, 4, 5), 
                 q32_2 = c(1, 2, 3, 4, 5),
                 q32_3 = c(1, 2, 3, 4, 5), 
                 q22_1 = c(1, 2, 3, 4),
                 q22_2 = c(1, 2, 3, 4), 
                 q22_3 = c(1, 2, 3, 4))

不同的问题具有不同的选项级别,人们在回答问题时可以选择这些选项。
我想对q22(1-3)合并值1和2,所以它们都是1,我怎么做?

gzszwxb4

gzszwxb41#

循环遍历列名的子集,并将2s更改为1:

cols <- grep("^q22", names(dt), value = TRUE)

dt[, (cols) := lapply(.SD, function(i) ifelse(i %in% 1:2, 1, i)), .SDcols = cols ]

dt
#    q32_1 q32_2 q32_3 q22_1 q22_2 q22_3
# 1:     1     1     1     1     1     1
# 2:     2     2     2     1     1     1
# 3:     3     3     3     3     3     3
# 4:     4     4     4     4     4     4
# 5:     5     5     5     1     1     1
zazmityj

zazmityj2#

使用data.tableset()

for (col in names(dt)) {
  if (col %like% "^q22_[1-3]$") set(dt, which(dt[[col]] == 2), col, value = 1)
}
qltillow

qltillow3#

请尝试下面的代码

library(tidyverse)

dt %>% mutate(across(starts_with('q22'), ~ifelse(.x==2,1,.x)))

#output

   q32_1 q32_2 q32_3 q22_1 q22_2 q22_3
1:     1     1     1     1     1     1
2:     2     2     2     1     1     1
3:     3     3     3     3     3     3
4:     4     4     4     4     4     4
5:     5     5     5     1     1     1

相关问题