说我有两张桌子:
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
的所有结果?:
let num val
1: a 3 -0.8356286
2: b 3 -0.8204684
答案 0 :(得分:12)
答案 1 :(得分:0)
一种解决方案是进行合并并删除存在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
:
merge(tab1,tab2,all=T)[is.na(val.y),1:3,with=F]
let num val.x
1: a 3 -0.8356286
2: b 3 -0.8204684