2

与 SO 中以前的问题类似的快速问题,但不完全是。

假设我有两个数据框。keep如果相同的id变量出现在另一个数据框 ( ) 中,我想删除一个数据框 ( ) 中的观察结果delete

例如,keep可能看起来像这样:

id   var
1    dog
2    dog
3    cat
4    dog
5    dog
6    cat

然后delete可能看起来像这样:

id   var2
1    blue
3    red
5    blue

我想要的结果是:

id  var
2   dog
4   dog
6   cat

我有一种感觉,这是相当基本的(可能使用data.tableand match,或!duplicate?),但我不太清楚如何保留var和删除基于id变量。谢谢你的帮助!

4

2 回答 2

4

这可能有效:

keep[!(keep$id %in% delete$id),]

  id var
2  2 dog
4  4 dog
6  6 cat
于 2013-08-12T18:21:26.337 回答
0
df1 = read.table(text = 'id   var
1    dog
2    dog
3    cat
4    dog
5    dog
6    cat', header = T)
df2 = read.table(text = 'id   var2
1    blue
3    red
5    blue', header = T)

library(data.table)

# convert to data.table, set the key correctly
dt1 = data.table(df1, key = 'id')
dt2 = data.table(df2, key = 'id')

# yep, *that* simple (and also will be very fast)
dt1[!dt2]
#   id var
#1:  2 dog
#2:  4 dog
#3:  6 cat
于 2013-08-12T18:21:35.507 回答