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

R语言data.table列操作:id匹配、排序及group值替换高效实现

基于data.table的高效实现方案

所有操作均使用data.table原生语法,按引用修改避免不必要的内存拷贝,适配大数据量处理场景。

library(data.table)

# 先统一group列类型为整数,消除factor层级限制,避免后续操作报错
dt.2018[, group := as.integer(as.character(group))]
dt.2019[, group := as.integer(as.character(group))]

步骤1:删除dt.2019中id不存在于dt.2018的整行数据

使用data.table半连接实现,性能远高于基础包的%in%判断,大数据量下优势更明显:

dt.2019 <- dt.2019[dt.2018, on = .(id), nomatch = NULL]

步骤2:追加dt.2018独有id行到dt.2019,新增行group设为8

用反连接取出dt.2018独有的id行,修改group值后合并:

# 提取dt.2018有、dt.2019没有的id对应行
add_rows <- dt.2018[!dt.2019, on = .(id)]
# 修改新增行的group为8
add_rows[, group := 8]
# 追加到dt.2019
dt.2019 <- rbind(dt.2019, add_rows)

步骤3:两个表按id列排序,保证相同id行索引一致

使用setkey按引用排序,无需复制全表数据,效率极高:

setkey(dt.2018, id)
setkey(dt.2019, id)

步骤4:替换dt.2019的group取值

用fcase实现批量匹配替换,逻辑清晰且性能优异:

dt.2019[, group := fcase(
  group == 0, 4L,
  group == 1, 5L,
  group == 2, 6L,
  group == 3, 7L,
  group == 8, 8L
)]

运行完成后可执行print(dt.2019)核对结果是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:09:00