添加列到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)'。所以你可以繼續加入其他太多的表格,只需設置一次。 –