使用此选项,可以使用另一个数据帧中的值删除数据帧中存在的数据:
df1[!(df1$name %in% df2$name),]
如果有第二列我想考虑在 df1 中的删除散文示例中,有列名和 id,并且在 df2 中相同,如何检查两列中的值? 试用示例df1[!([df1$name & df1$id] %in% [df2$name & df2$id]),]
我们可以使用
df1[!(paste(df1$name, df1$id) %in% paste(df2$name, df2$id)),]
或者用anti_join
library(dplyr)
anti_join(df1, df2, by = c('name', 'id'))
可能你正在尝试这样做:
df1[!(df1$name %in% df2$name & df1$id %in% df2$id),]
让我们看看这个基本示例中发生了什么:
R> 1:10 %in% 3:6
[1] FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
因此,这种方法会产生一个向量,其中每个元素 1:10 都与元素 3:6 进行检查
虽然这是一个紧凑而令人敬畏的矢量化的东西,但它很少直接用于数据帧操作 - 其中所有向量都堆叠为列。在您的情况下,联接操作可能是一种更直接的方法 - anti_join。