基于R中另一个数据框的多个列删除数据框中的行

时间:2015-08-11 13:09:24

标签: r dataframe subset

我想删除具有与另一个数据框中的值匹配的列的特定值的行。

a<-c(1,1,2,2,2,4,5,5,5,5)
b<-c(10,10,22,30,30,30,40,40,40,40)
c<-c(1,2,1,2,2,2,2,1,1,2)
d<-rnorm(1:10)
data<-data.frame(a,b,c,d)

a<-c(2,5)
b<-c(30,40)
c<-c(2,1)
x<-data.frame(a,b,c)

这样你就可以成为:

 a  b c          d
 1 10 1 -0.2509255
 1 10 2  0.4142277
 2 22 1 -0.1340514
 4 30 2 -1.5372009
 5 40 2  1.9001932
 5 40 2 -1.2825212

我尝试了以下操作,但没有效果:

y<-data[!data$a==a & !data$b==b & !data$c==c,] 

y<-subset(data, !data$a==x$a & !data$b==x$b & !data$c==x$c)

我还尝试在第二步中标记应删除的子集,但这也不起作用:

y<-data
y$rm<-ifelse(y$a==x$a & y$b==x$b & y$c==x$c, 1, 0)

真正的“数据”和“x”要长得多,数据中的行数可变,与x中的每一行相匹配。

1 个答案:

答案 0 :(得分:2)

我们可以使用anti_join中的dplyr。它将返回来自&#39;数据&#39;的所有行。不匹配&#39; x&#39;中的值。我们在by参数中指定要考虑的变量。

library(dplyr)
anti_join(data, x, by=c('a', 'b', 'c'))