根据另一个数据表过滤数据表

qua*_*ant 2 r filter data.table

我有以下data.tables

library(data.table)


 dt_1 <- data.table(id = c('cg','fs','fs'),
                 v1 = c('a','a','b'),
                 v2 = c('d','e','f'))

dt_2 <- data.table(id = c('cg','fs','cg'),
                   v1 = c('a','a','b'))
Run Code Online (Sandbox Code Playgroud)

我想dt_1基于过滤dt_2.最后我想结束

   id v1 v2
1: fs  b  f
Run Code Online (Sandbox Code Playgroud)

因此,过滤掉其中包含的确切dt_1dt_2

这个操作

dt_1[!(id%in%dt_2$id & v1%in%dt_2$v1)]
Run Code Online (Sandbox Code Playgroud)

不起作用,因为它也需要dt_2$iddt_2$v1和的内部组合

dt_1[!dt_2] 抛出错误.

有任何想法吗 ?

Cat*_*ath 6

您需要指定您加入的内容:

dt_1[!dt_2, on=names(dt_2)] # "easier" than intersect(names(dt_1), names(dt_2)) because all dt_2 variables are in dt_1 but in a more general context the latter will be preferable
#   id v1 v2
#1: fs  b  f
Run Code Online (Sandbox Code Playgroud)