【发布时间】:2012-06-06 02:10:16
【问题描述】:
我有两个数据框 df1 和 df2。它们具有相同的(两)列。我想从 df1 中删除 df2 中的行。
【问题讨论】:
标签: r
我有两个数据框 df1 和 df2。它们具有相同的(两)列。我想从 df1 中删除 df2 中的行。
【问题讨论】:
标签: r
您可以使用多个软件包来做到这一点。但这里是如何使用基本 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
【讨论】:
试试这个:
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
请注意,df1 和 df2 与 Lapointe 的相同,但反之亦然,因为您想从 df1 中删除 df2 中的行,因此 setdiff 会从 x 中删除包含在y。见?setdiff
您将获得与 Lapointe 相同的结果
【讨论】:
考虑到您有一个在两个数据帧之间匹配的变量 (var_match),我得到了一个简单的方法:
df_1_minus_2 <- df_1[which(!df_1$var_match %in% df_2$var_match),]
【讨论】: