说我有两个表:
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
在这种情况下,它等效于anti join:
let num val
1: a 3 -0.8356286
2: b 3 -0.8204684
但是tab1[!tab2, on=c("let", "num")]
对于每个setdiff()
只会是第一行。标记为v1.9.8,let,num
。
一种解决方案是合并并从FR #547中删除有值的行>
tab2
使用
d<-as.data.frame(merge(tab1,tab2,all=T)) t<-is.na(d[,4]) d[t,][,-4] let num val.x 3 a 3 -0.8356286 6 b 3 -0.8204684
:
data.table