2016-07-04 13 views
0

Ich habe Schwierigkeiten, Zeilen aus einem Datenrahmen in R zu entfernen, wobei Werte aus verschiedenen Spalten mit zwei Werten aus verschiedenen Spalten in einem zweiten Datenrahmen übereinstimmen.Zeilen aus einem Datenrahmen entfernen, die zwei Spalten in einem anderen Datenrahmen entsprechen R

zum Beispiel mit den folgenden Pseudodaten:

ID1 <- c(5,10,6) 
ID2 <- c(3,5,4) 
Value <- rnorm(3) 
DF1 <- data.frame(ID1, ID2, Value) 

x <- c() 
y <- c() 
z <- c() 

for (i in 1:10){ 
a <- rep(i, 10) 
b <- c(1:10) 
c <- rnorm(10) 
x <- c(x, a) 
y <- c(y, b) 
z <- c(z, c) 
} 

DF2 <- data.frame(x, y, z) 

Ich mag die Zeilen aus DF2 wo die Kombination von x und y Einstimmungen ID1 und ID2 von DF1 entfernen (dh x = 5 and y = 3, x = 10 and y = 5, x = 6 and y = 4 , aber auch x = 3 and y = 5, x = 5 and y = 10, x = 4 and y = 6).

Danke.

Antwort

2

Make Liste ausschließen

excl <- data.frame(
    x = c(DF1$ID1, DF1$ID2), 
    y = c(DF1$ID2, DF1$ID1)) 

Dann anti-Join:

library(dplyr) 
anti_join(DF2, excl, by = c("x", "y")) 

Oder Paste wie in den Kommentaren vorgeschlagen:

DF2[! paste(DF2$x, DF2$y) %in% 
     c(paste(DF1$ID1, DF1$ID2), 
     paste(DF1$ID2, DF1$ID1)), ] 
+1

oder verwenden Sie '% in%' nach 'Einfügen' – akrun

0

Eine weitere Option unter Verwendung des @ zx8754 excl und match_df Funktion von plyr Paket

library(plyr) 
DF2[-as.numeric(rownames(match_df(DF2,excl))),] 
Verwandte Themen