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

如何将含重复纠错条目的R data.table合并为每个ID对应的完整记录

处理思路

针对你描述的「先录入错误记录、再新增修正记录」的重复数据场景,按以下两步处理即可得到你想要的结果:

  • 先补全空的id字段:空id对应的是前一条非空id的同组修正记录,用上一个非空id填充所有空id完成分组标记
  • 按id分组后对每个字段提取非空的有效值即可,你的示例中同id同字段的非空值完全一致,直接去重提取即可
代码实现(基于data.table)
library(data.table)

# 示例数据
dt1 <- data.table(
    id = c('a','','a','b','','b','c','','c'), 
    v1 =c('a','a','a','b','b','','c','','c'), 
    v2 =c('a','a','a','b','','b','','','c'), 
    v3 =c('a','a','a','','b','','','c',''), 
    v4 =c('','a','','b','','','c','','c'), 
    v5 =c('a','','a','','','b','','','c'), 
    v6 =c('','a','','','b','b','c','c','c')
)

# 1. 填充空id,将空字符串转为NA后用上一个非空值填充
dt1[id == "", id := NA]
dt1[, id := zoo::na.locf(id)]

# 2. 按id分组,每个字段提取非空的唯一值
result <- dt1[, lapply(.SD, function(col) unique(col[col != ""])), by = id]

运行后result就是你期望的输出结果。

补充说明

如果你的实际数据存在特殊情况,可以按需求调整逻辑:

  • 若同id同字段存在多个不同的非空值,说明存在冲突的修正记录,可以调整取值逻辑,比如取最后一次录入的记录对应的值作为有效值
  • 若你的数据空值用NA而非空字符串存储,把代码中的col != ""替换为!is.na(col)即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:15:00