如何在R中完成数据质量校验、数据集合并及差异ID提取?
问题1:合并后行数超过预期的原因
- 你设置
all=FALSE调用的是内连接,匹配逻辑为左表df1的每一行,会和右表df2中所有ID相同的行一一匹配 - 行数超过820的核心原因是df2的ID列存在重复值:假设df2中某ID出现了k次,那么df1中该ID对应的每一行都会生成k条匹配结果,最终总行数就会大于df1的原始行数
- 验证方法:运行命令
sum(duplicated(df2$ID)),如果返回值大于0,即可确认df2存在重复ID - 可选修复方案:如果每个ID只需要对应一个Points值,可先对df2按ID去重后再合并:
# 保留每个ID的第一条记录,也可根据需求调整去重逻辑 df2_unique <- df2[!duplicated(df2$ID), ] merged_df <- merge(df1, df2_unique, by = "ID", all = FALSE)
问题2:生成df3(df1存在但df2不存在的ID对应记录)
两种常用实现方式:
基础R实现
df3 <- df1[!df1$ID %in% df2$ID, ]
dplyr包实现
library(dplyr) df3 <- anti_join(df1, df2, by = "ID")
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

