R中合并两个data.table:移除重叠重复项同时保留各数据集内部重复
R data.table 优先保留指定数据集记录的合并方案
实现逻辑
核心逻辑是先过滤掉dty中与dtx存在ID-date-code重叠的所有记录,再将完整dtx与过滤后的dty合并,既满足重叠场景下dtx优先的要求,也保留两个数据集各自内部的重复记录和来源标记。
实现代码
library(data.table) # 提取dtx中所有唯一的ID-date-code匹配键 dtx_unique_keys <- unique(dtx[, .(ID, date, code)]) # 过滤dty,仅保留未在dtx中出现过的ID-date-code对应的所有记录 dty_clean <- dty[!dtx_unique_keys, on = .(ID, date, code)] # 合并两个表得到最终结果 dt_combined <- rbindlist(list(dtx, dty_clean), use.names = TRUE) # 可选:按ID、日期、编码、来源排序方便查看 setorder(dt_combined, ID, date, code, dataset)
方案说明
- 完整保留dtx的全部记录,包括同一ID-date-code下的多条重复条目
- dty中仅排除与dtx ID-date-code完全匹配的所有条目,自身内部的非重叠重复记录会完整保留
- 所有行的
dataset来源标记不会被修改或丢失
该方法完美适配多记录场景,不会出现之前rbindlist、merge方法误删内部重复或保留重叠记录的问题
内容的提问来源于stack exchange,提问作者jmogil
相关产品推荐
相关产品推荐

