Hapus baris dalam bingkai data berdasarkan beberapa kolom dari bingkai data lain di R [duplikat]

Saya ingin menghapus baris yang memiliki nilai spesifik untuk kolom yang cocok dengan nilai di bingkai data lain.

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)

Sehingga kamu bisa menjadi:

 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

Saya mencoba yang berikut ini, tetapi tidak berhasil:

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)

Saya juga mencoba menandai yang harus dihapus untuk dijadikan subset pada langkah kedua, tetapi ini juga tidak berhasil:

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

"Data" dan "x" yang sebenarnya lebih panjang, dan terdapat variabel jumlah baris dalam data yang cocok dengan setiap baris di x.


person Maya    schedule 11.08.2015    source sumber


Jawaban (1)


Kita dapat menggunakan anti_join dari dplyr. Ini akan mengembalikan semua baris dari 'data' yang tidak cocok dengan nilai di 'x'. Kami menentukan variabel yang akan dipertimbangkan dalam argumen by.

library(dplyr)
anti_join(data, x, by=c('a', 'b', 'c'))
person akrun    schedule 11.08.2015