R语言如何排除dataframe中与另一dataframe同列值匹配的行
你使用的代码未得到预期结果的核心原因是:!=为逐元素比较运算符,当df1和df2的行数不一致时,R会自动循环较短的df2$organization_name向量匹配长向量,完全不符合「排除所有在df2中出现过的organization_name对应行」的需求。
可行替代方案
方案1:使用dplyr的anti_join(最简洁,推荐)
anti_join是专门用于提取「第一个数据集中不存在于第二个数据集匹配项」的函数,直接一行代码实现需求:
# 两个数据集的匹配列名相同的情况 newdf <- anti_join(df1, df2, by = "organization_name") # 如果两个数据集对应列名不同,可通过by参数指定映射关系 # newdf <- anti_join(df1, df2, by = c("df1中的列名" = "df2中的列名"))
方案2:使用%in%运算符(兼容base R和dplyr)
%in%可以判断前一个向量的元素是否存在于后一个向量中,对结果取反即可实现过滤:
- base R写法:
newdf <- df1[!df1$organization_name %in% df2$organization_name, ]
- dplyr的filter写法:
newdf <- filter(df1, !organization_name %in% df2$organization_name)
内容的提问来源于stack exchange,提问作者user000
相关产品推荐
相关产品推荐

