如何使用dplyr中的anti_join来查找不匹配的记录

289 阅读2分钟

你可以使用R中dplyr包中的anti_join()函数来返回一个数据框中所有在另一个数据框中没有匹配值的行。

这个函数使用以下基本语法:

anti_join(df1, df2, by='col_name')

下面的例子展示了如何在实践中使用这种语法。

例1:使用anti_join()处理一列数据

假设我们在R中拥有以下两个数据框:

#create data frames
df1 <- data.frame(team=c('A', 'B', 'C', 'D', 'E'),
                  points=c(12, 14, 19, 24, 36))

df2 <- data.frame(team=c('A', 'B', 'C', 'F', 'G'),
                  points=c(12, 14, 19, 33, 17))

我们可以使用**anti_join()**函数来返回第一个数据框中所有在第二个数据框中没有匹配团队的行。

library(dplyr)

#perform anti join using 'team' column
anti_join(df1, df2, by='team')

  team points
1    D     24
2    E     36

我们可以看到,第一个数据框中正好有两个球队在第二个数据框中没有匹配的球队名称。

例2:使用anti_join()处理多列数据

假设我们在R中拥有以下两个数据框:

#create data frames
df1 <- data.frame(team=c('A', 'A', 'A', 'B', 'B', 'B'),
                  position=c('G', 'G', 'F', 'G', 'F', 'C'),
                  points=c(12, 14, 19, 24, 36, 41))

df2 <- data.frame(team=c('A', 'A', 'A', 'B', 'B', 'B'),
                  position=c('G', 'G', 'C', 'G', 'F', 'F'),
                  points=c(12, 14, 19, 33, 17, 22))

我们可以使用anti_join()函数来返回第一个数据框中所有在第二个数据框中没有匹配球队位置的行:

library(dplyr)

#perform anti join using 'team' and 'position' columns
anti_join(df1, df2, by=c('team', 'position'))

  team position points
1    A        F     19
2    B        C     41

我们可以看到,第一个数据框中正好有两条记录在第二个数据框中没有匹配的球队名称位置。

其他资源

下面的教程解释了如何在dplyr中执行其他常用功能:

如何使用dplyr按索引选择列
如何使用dplyr连接多个数据框
如何使用dplyr过滤包含某个字符串的行