2016-07-04 5 views
0

Я изо всех сил пытаюсь удалить строки из фрейма данных в R, где значения из разных столбцов соответствуют двум значениям из разных столбцов во втором кадре данных.Удалите строки из фрейма данных, которые соответствуют двум столбцам в другой части данных. R

Например, с учетом следующих псевдо-данные:

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) 

Я хотел бы удалить строки из DF2 где сочетание x и y матчей ID1 и ID2 от DF1 (т.е. x = 5 and y = 3, x = 10 and y = 5, x = 6 and y = 4 , но также x = 3 and y = 5, x = 5 and y = 10, x = 4 and y = 6).

Спасибо.

ответ

2

Make исключить список

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

Затем с помощью анти присоединиться:

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

Или с помощью пасты, как предложено в комментариях:

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

или использовать '% in%' после 'paste'ing – akrun

0

Другой вариант, используя @ zx8754-х excl и match_df функция plyr упаковка

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