R语言中实现基于单列比对并返回整行的setdiff功能
基于指定列返回数据表差异行的方法
方法一:使用dplyr包(推荐,语法简洁)
先加载dplyr包,然后用anti_join()函数,它会返回第一个表中在第二个表没有匹配指定列的所有行:
# 未安装包的话先运行:install.packages("dplyr") library(dplyr) # 获取Table1中name列不在Table2里的整行数据 table1_unique_rows <- anti_join(Table1, Table2, by = "name")
方法二:Base R原生方法(无需额外包)
利用%in%运算符判断匹配关系,直接筛选目标行:
# 获取Table1中name列不在Table2里的整行数据 table1_unique_rows <- Table1[!Table1$name %in% Table2$name, ]
拓展:获取双向差异(两个表各自独有的行)
如果需要同时找出Table1和Table2彼此独有的行,可以结合两次筛选后合并:
# dplyr实现 table1_only <- anti_join(Table1, Table2, by = "name") table2_only <- anti_join(Table2, Table1, by = "name") all_unique_rows <- rbind(table1_only, table2_only) # Base R实现 table1_only <- Table1[!Table1$name %in% Table2$name, ] table2_only <- Table2[!Table2$name %in% Table1$name, ] all_unique_rows <- rbind(table1_only, table2_only)
注意:如果数据框存在重复的name值,上述方法会保留所有符合条件的行;若需去重后筛选,可先对name列做去重处理。
内容的提问来源于stack exchange,提问作者Nashe
相关产品推荐
相关产品推荐

