在R中如何删除df1里存在于df2中的重复行
R语言删除df1中与df2完全一致行的实现方案
最优方案:使用dplyr的anti_join()(最优雅简洁)
anti_join是dplyr包中专门用于取两个数据集行差集的函数,默认按照两个数据框的所有共同列进行匹配,返回仅在第一个数据框中存在的行,完全贴合需求:
# 加载dplyr包,未安装可先运行 install.packages("dplyr") library(dplyr) # 直接取df1和df2的行差集 df1_clean <- anti_join(df1, df2)
运行后得到的df1_clean就已经删除了同时存在于df2中的完全重复行,你的示例运行后会保留3行:Mike(20)、Paul(21)、Henry(23)。
无依赖方案:Base R原生实现
如果不想安装第三方包,可以用原生函数实现,核心逻辑是将每行的所有列值组合为唯一标识,再筛选不在df2标识集合中的行:
# 按所有列组合匹配,筛选df1中不存在于df2的行 df1_clean <- df1[!interaction(df1) %in% interaction(df2), ]
如果两个数据框的列顺序不一致,可手动指定匹配列保证准确性:
match_cols <- c("name", "age") df1_clean <- df1[!interaction(df1[match_cols]) %in% interaction(df2[match_cols]), ]
内容的提问来源于stack exchange,提问作者Pavel Shliaha
相关产品推荐
相关产品推荐

