簡體   English   中英

從數據框中刪除與另一個數據框 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中刪除xy的組合與DF1中的ID1ID2匹配的行(即x = 5 and y = 3x = 10 and y = 5x = 6 and y = 4 ,但也x = 3 and y = 5x = 5 and y = 10x = 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包的exclmatch_df函數的另一種選擇

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM