排除一个R data.table中的行,这些行存在于另一个多个键上

时间:2018-01-11 22:47:17

标签: r data.table

我有两个R data.tables如下:

first

user_id | val
-------------
      1 |   A
      1 |   C
      2 |   A
      3 |   C
      4 |   B
      1 |   B
      2 |   C
      3 |   B
      1 |   D

second

user_id | val
-------------
      1 |   A
      1 |   C
      4 |   B

我想让first中不在second内的行像这样:

third

user_id | val
-------------
      2 |   A
      3 |   C
      1 |   B
      2 |   C
      3 |   B
      1 |   D

所以我知道setdiff函数,我知道我可以合并first[!second,],但我不知道如何为多键情况做这个。

2 个答案:

答案 0 :(得分:2)

使用on参数,假设df1df2都是data.table s:

df1[!df2, on=.(user_id, val)]

#   user_id val
#1:       2   A
#2:       3   C
#3:       1   B
#4:       2   C
#5:       3   B
#6:       1   D

答案 1 :(得分:0)

library(dplyr)

third <- first %>%
anti_join(second, by = c("user_id", "val"))