添加列到data.table我试图做到的,是类似 快速SQL加入类中的R
select *
from T left join
T2 on T1.key2 = T2.key2
left join T3 on T1.key3 = T3.key3
但R中使用data.table
为SQL。具体而言,从T2附加'两个列和从T3到第一个表的一个列。
我目前的解决方案看起来像
setkey(t1,key2)
t1 <- t2[t1]
setkey(t1,key3)
t1 <- t3[t1]
setkey(t1,key1) # restore the original key
这会将整个T1两次,是不是太快。在“内部”t1是一个相当大的数据集~1毫米行,t2和t3只是小型的“映射”表。
我认为使用J(..)
可能会有所帮助,但我对data.tables是新手,并且无法真正了解如何在此处应用它。
有人可以请建议一个更快的连接解决方案吗?由于
你可以显示一个可重现的例子与期望的输出?我怀疑你看起来像[this]这样的东西(http://stackoverflow.com/questions/30913338/join-two-data-tables-and-use-only-one-column-from-second-dt-in -r/30914530#30914530) –
是的,这与我所寻找的非常接近。一个具体的 - 是否有必要setkey(dt1)来实现这一点?设置密钥将重新排列内存中的data.table,对吧? –
是的,但设置密钥非常高效,即使在1e8行数据集上也不到一秒钟。更重要的是,在二进制连接之后,您不会丢失密钥,例如'DT < - data.table(A = letters [1:4]); DT2 < - data.table(A = letters [1:3]); setkey(DT,A); DT [DT2,B:= i.A];键(DT)'。所以你可以继续加入其他太多的表格,只需设置一次。 –