10

I have two data frames df1 and df2. They have the same (two) columns. I want to remove the rows from df1 that are in df2.

4

3 回答 3

8

你可以用几个包来做到这一点。但这里是如何使用基础 R 来做到这一点。

df1 <-matrix(1:6,ncol=2,byrow=TRUE)
df2 <-matrix(1:10,ncol=2,byrow=TRUE)
all <-rbind(df1,df2) #rbind the columns
#use !duplicated fromLast = FALSE and fromLast = TRUE to get unique rows.
all[!duplicated(all,fromLast = FALSE)&!duplicated(all,fromLast = TRUE),] 

     [,1] [,2]
[1,]    7    8
[2,]    9   10
于 2012-06-06T02:34:46.810 回答
3

尝试这个:

df2 <-matrix(1:6,ncol=2,byrow=TRUE)
df1 <-matrix(1:10,ncol=2,byrow=TRUE)

data.frame(v1=setdiff(df1[,1], df2[,1]), v2=setdiff(df1[,2], df2[,2]))
  v1 v2
1  7  8
2  9 10

请注意,df1and与 Lapointe 的相同,但反之亦然,因为您想从 df1 中删除 df2中df2的行,因此 setdiff 会从中删除. 看xy?setdiff

你会得到与 Lapointe 相同的结果

于 2012-06-06T11:26:45.747 回答
2

考虑到您有一个在两个数据帧之间匹配的变量(var_match),我得到了一个简单的:

df_1_minus_2 <- df_1[which(!df_1$var_match %in% df_2$var_match),]
于 2019-12-04T18:20:37.413 回答