假设我有两个数据帧
df1 <- data.frame (name = c("Mike", "Paul", "Paul", "Henry"),
age = c(20, 21, 22, 23))
df2 <- data.frame (name = c("Sam", "Paul", "Paul", "Bob"),
age = c(26, 30, 22, 23))
我想从df1中删除第3行,因为这一行也存在于df2
在R中最优雅的方法是什么?
使用setdiff
fromdplyr
library(dplyr)
setdiff(df1, df2)
name age
1 Mike 20
2 Paul 21
3 Henry 23
如果是基于常用列名的子集,则使用anti_join
anti_join(df1, df2)
在本例中,所有列都是公共的,因此默认情况下,它使用by
作为完整的列名。如果我们需要一个子集,在by
anti_join(df1, df2, by = c('name'))