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

R中如何基于ID匹配为data.table数据集的列填充对应值?

解决方案

你可以直接用data.table内置的更新连接(update join)实现需求,代码简洁且性能极高:

library(data.table)

# 方法1:原地修改df1,适合不需要保留原始df1的场景
df1[df2, on = .(ID), text := i.text]

# 方法2:不修改原始df1,生成新的结果表
res <- copy(df1)
res[df2, on = .(ID), text := fcoalesce(i.text, x.text)]

代码说明

  • 关联逻辑:通过on = .(ID)指定两个表按ID字段匹配
  • 取值逻辑:
    • i.text代表取右表(也就是df2)的text字段值,匹配成功的行默认优先用该值覆盖df1的text
    • 如果需要兼容df2也存在空值的场景,用fcoalesce(i.text, x.text)可以实现:只有当df2的text非空时才替换,否则保留df1原有值(x.text代表左表df1的原有text值)
  • 性能优势:该方法是原地更新,不需要生成中间合并表,适合处理百万级以上的大数据集

运行后得到的结果和你期望的输出完全一致:

ID text
 1:  1    a
 2:  2    a
 3:  3    b
 4:  4    b
 5:  5 <NA>
 6:  6    a
 7:  7    a
 8:  8    a
 9:  9    c
10: 10 <NA>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:06:03