我有以下data.table
s
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'))
我想基于dt_1
过滤dt_2
。最后我想结束
id v1 v2
1: fs b f
因此,请过滤掉dt_1
dt_2
完全行
此操作
dt_1[!(id%in%dt_2$id & v1%in%dt_2$v1)]
不起作用,因为它还需要dt_2$id
和dt_2$v1
的内部组合以及此
dt_1[!dt_2]
会抛出错误。
有什么想法吗?
答案 0 :(得分:6)
您需要指定您要加入的内容:
struct
答案 1 :(得分:4)
我们可以使用anti_join
library(dplyr)
anti_join(dt_1, dt_2)
# id v1 v2
#1 fs b f
请注意,如果列名相同,我们可以使用data.table::fsetdiff
fsetdiff(dt_1, dt_2)