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