[英]How does one do a full join using data.table?
In the data.table
FAQ , the nomatch = NA
parameter is said to be akin to an outer join. 在
data.table
FAQ中 , nomatch = NA
参数被认为类似于外连接。 However, I haven't been able to get data.table
to do a full outer join – only right outer joins. 但是,我无法获得
data.table
来进行完全外连接 - 只有正确的外连接。
For example: 例如:
a <- data.table("dog" = c(8:12), "cat" = c(15:19))
dog cat
1: 8 15
2: 9 16
3: 10 17
4: 11 18
5: 12 19
b <- data.table("dog" = 1:10, "bullfrog" = 11:20)
dog bullfrog
1: 1 11
2: 2 12
3: 3 13
4: 4 14
5: 5 15
6: 6 16
7: 7 17
8: 8 18
9: 9 19
10: 10 20
setkey(a, dog)
setkey(b, dog)
a[b, nomatch = NA]
dog cat bullfrog
1: 1 NA 11
2: 2 NA 12
3: 3 NA 13
4: 4 NA 14
5: 5 NA 15
6: 6 NA 16
7: 7 NA 17
8: 8 15 18
9: 9 16 19
10: 10 17 20
So, nomatch = NA
produces a right outer join (which is the default). 因此,
nomatch = NA
会产生右外连接(这是默认值)。 What if I need a full join? 如果我需要完整加入怎么办? For example:
例如:
merge(a, b, by = "dog", all = TRUE)
# Or with plyr:
join(a, b, by = "dog", type = "full")
dog cat bullfrog
1: 1 NA 11
2: 2 NA 12
3: 3 NA 13
4: 4 NA 14
5: 5 NA 15
6: 6 NA 16
7: 7 NA 17
8: 8 15 18
9: 9 16 19
10: 10 17 20
11: 11 18 NA
12: 12 19 NA
Is that possible with data.table
? data.table
有可能吗?
You actually have it right there. 你确实在那里拥有它。 Use
merge.data.table
which is exactly what you are doing when you call 使用
merge.data.table
,这正是你打电话时所做的
merge(a, b, by = "dog", all = TRUE)
since a
is a data.table
, merge(a, b, ...)
calls merge.data.table(a, b, ...)
由于
a
是data.table
, merge(a, b, ...)
调用merge.data.table(a, b, ...)
x= data.table(a=1:5,b=11:15)
y= data.table(a=c(1:4,6),c=c(101:104,106))
setkey(x,a)
setkey(y,a)
unique_keys <- unique(c(x[,a], y[,a]))
y[x[.(unique_keys), on="a"] ] # Full Outer Join
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.