根据2个data.frames之间的重复删除观察结果

时间:2013-08-12 18:15:12

标签: r

快速问题与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.tablematch,或!duplicate?)但我无法弄清楚如何保持{{1}并根据var变量删除。谢谢你的帮助!

2 个答案:

答案 0 :(得分:4)

这可能有效:

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

  id var
2  2 dog
4  4 dog
6  6 cat

答案 1 :(得分: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