如何使用data.table进行完全联接? [英] How does one do a full join using data.table?
本文介绍了如何使用data.table进行完全联接?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在 data.table
常见问题解答中,data.table
进行 full 外部联接-只有正确的外部联接.
In the data.table
FAQ, the nomatch = NA
parameter is said to be akin to an outer join. However, I haven't been able to get data.table
to do a full outer join – only right outer joins.
例如:
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
因此,nomatch = NA
产生右外部联接(这是默认设置).如果我需要完全加入该怎么办?例如:
So, nomatch = NA
produces a right outer join (which is the default). 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
使用data.table
可以吗?
推荐答案
您实际上就在那儿.使用merge.data.table
恰恰是您通话时所做的
You actually have it right there. Use merge.data.table
which is exactly what you are doing when you call
merge(a, b, by = "dog", all = TRUE)
因为a
是data.table
,所以merge(a, b, ...)
调用merge.data.table(a, b, ...)
这篇关于如何使用data.table进行完全联接?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文