外联接data.table R.

jam*_*rta 12 r data.table

只是想知道是否有一种有效的方法来与数据表进行外连接,例如

a <- data.table(a=c(1,2,3),b=c(3,4,5))
b <- data.table(a=c(1,2),k=c(1,2))
merge(a,b,by="a",all.x=T)
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但它没有内部连接那么高效,因为下面的运行速度非常快,但上面的速度非常慢.

setkey(a,a)
setkey(b,a)
a[b,]
Run Code Online (Sandbox Code Playgroud)

Jus*_*tin 10

b[a,] 是你正在寻找的"外部联接".

看看?merge.data.table更具体的细节.

  • 感谢马修,这可以解释它。我假设您无法通过这种方式进行完全外部联接(仅外部外部联接和内部联接)? (2认同)
  • @jamborta 正确。但你可以对左或右执行“X[Y]”或“Y[X]”。它源自 _by-without-by_ 功能(类似于 SQL 中的 CROSS APPLY 和 OUTER APPLY)。这个想法是“j”针对“i”的每一行运行。这在完整的外连接上下文中没有意义。如果需要完全外连接,那么这就是“merge”可以做的。话虽如此,它即将出现,并且已经请求更多连接类型[在这个详细问题中](http://stackoverflow.com/questions/12773822/why-does-xy-join-of-data-tables-not- allowed-a-full-outer-join-or-a-left-join),这在要考虑的列表中。 (2认同)