如何执行“ setdiff”操作使用data.table合并? [英] How can I perform a "setdiff" merge using data.table?
本文介绍了如何执行“ setdiff”操作使用data.table合并?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
说我有两个表:
library(data.table)
set.seed(1)
tab1 <- data.table(
let = rep(letters[1:2], each = 3),
num = rep(1:3, 2),
val = rnorm(6),
key = c("let", "num")
)
tab2 <- data.table(
let = rep(letters[1:2], each = 2),
num = rep(1:2, 2),
val = rnorm(4),
key = c("let", "num")
)
表1:
> tab1
let num val
1: a 1 -0.6264538
2: a 2 0.1836433
3: a 3 -0.8356286
4: b 1 1.5952808
5: b 2 0.3295078
6: b 3 -0.8204684
表2:
> tab2
let num
1: a 1
2: a 2
3: b 1
4: b 2
有没有一种方法可以合并这些表,这样我就可以在 tab1
中获得所有结果。不在 tab2
中的?:
Is there a way to "merge" these tables such that I get all the results in tab1
that are not in tab2
?:
let num val
1: a 3 -0.8356286
2: b 3 -0.8204684
推荐答案
在这种情况下,它等效于 anti join :
In this case, it's equivalent to an anti join:
tab1[!tab2, on=c("let", "num")]
但是 setdiff()
只会使每个 let,num
的第一行。此标记为v1.9.8, FR#547 。
But setdiff()
would only the first row for every let,num
. This is marked for v1.9.8, FR #547.
这篇关于如何执行“ setdiff”操作使用data.table合并?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文