You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在data.table中合并q22系列列的1和2值为1?

处理data.table中指定列的数值合并

针对你拥有的大型data.table数据集,要将q22_1、q22_2、q22_3列中值为1和2的项合并为1,可以利用data.table的高效原地修改特性实现,具体代码如下:

核心实现代码

library(data.table)

# 你的原始数据集
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))

# 批量修改指定列:将1和2替换为1,其余值保持不变
dt[, patterns("^q22_") := lapply(.SD, function(x) fifelse(x %in% c(1, 2), 1, x))]

代码解释

  • patterns("^q22_"):通过正则表达式匹配所有以q22_开头的列,无需手动列出每一列,适合批量操作。
  • .SD代表选中的列集合,lapply(.SD, ...)对每一列执行自定义处理逻辑。
  • fifelse是data.table提供的高效条件判断函数,比base R的ifelse速度更快,更适合处理大型数据集。这里判断如果列中的值属于c(1,2),就替换为1,否则保留原数值(包括NA)。
  • :=是data.table的原地赋值运算符,不会复制整个数据集,大幅提升大型数据集的处理效率。

验证结果

执行代码后,查看修改后的q22_*列:

dt[, .(q22_1, q22_2, q22_3)]
#    q22_1 q22_2 q22_3
# 1:     1     1     1
# 2:     1     1     1
# 3:     3     3     3
# 4:     4     4     4
# 5:    NA    NA    NA

内容的提问来源于stack exchange,提问作者Hellihansen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:42:19