[英]Remove rows from a dataframe where values in two columns dont match in R
[英]Remove rows from a dataframe that match two columns in another dataframe 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
的組合與DF1
中的ID1
和ID2
匹配的行(即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
)。
制作排除列表
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)), ]
使用@zx8754 的plyr
包的excl
和match_df
函數的另一種選擇
library(plyr)
DF2[-as.numeric(rownames(match_df(DF2,excl))),]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.