2014-01-28 73 views
10

我已經尋找這個簡單的問題的答案,但無法找到類似的問題。我有3個數據表:數據表可以爲3個或更多數據表執行左連接嗎?

set.seed(0) 
demo <- data.table(id = 1:10, demo.var = rnorm(10), key = 'id'); demo 
lab <- data.table(id = 1:7, tc = rnorm(7), key = 'id'); lab 
anthro <- data.table(id = 4:9, bmi = rnorm(6), key = 'id'); anthro 

所有的ID是在實驗室,是椐人體在演示data.table,但實驗室和含有椐人體在演示的ID的不同子集

兩個

lab[demo] 
anthro[demo] 

給出我想要的信息:所有10個ID都包含來自實驗室或anthro data.table的附加信息,但是有沒有將所有3個信息以類似的方式合併在一起?我已經嘗試了一些排列如

anthro[lab][demo] 

但是這給了蜜餞的信息椐人體僅對那些在實驗室data.table的ID - 有一個爲ID的8沒有信息椐人體和9個

謝謝提前任何幫助

+4

+1用於以簡單易用的格式爲答案提供數據;希望大家都這樣做。 – BrodieG

+0

'B [A]'做了一個左連接,而不是一個完整的外連接......如果這確實是你要找的東西,那麼你可能會編輯標題? (儘管這裏'demo'具有你想要加入的所有值,它按預期工作)。 – Arun

回答

10
anthro[lab[demo]] 
#  id  bmi   tc  demo.var 
# 1: 1   NA 0.7635935 1.262954285 
# 2: 2   NA -0.7990092 -0.326233361 
# 3: 3   NA -1.1476570 1.329799263 
# 4: 4 -0.8919211 -0.2894616 1.272429321 
# 5: 5 0.4356833 -0.2992151 0.414641434 
# 6: 6 -1.2375384 -0.4115108 -1.539950042 
# 7: 7 -0.2242679 0.2522234 -0.928567035 
# 8: 8 0.3773956   NA -0.294720447 
# 9: 9 0.1333364   NA -0.005767173 
# 10: 10   NA   NA 2.404653389 

內部表始終是一個外部聯接的執行,所以這種嵌套可以確保與超集索引值表始終是內部表。

+0

謝謝 - 簡直不敢相信答案是多麼簡單,而且在指出我之後它是如此明顯 –