2014-01-28 5 views
10

Ich habe nach einer Antwort auf diese einfache Frage gesucht, kann aber keine ähnliche Frage finden. Ich habe 3 Datentabellen:Kann Datentabelle einen linken Join für 3 oder mehr Datentabellen ausführen?

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 

Alle IDs, die in Labor und anthro sind in der Demo data.table sind, aber Labor und anthro enthalten verschiedene Untergruppen der IDs in Demo

Beide

lab[demo] 
anthro[demo] 

geben Sie die Informationen, die ich will: alle 10 IDs mit zusätzlichen Informationen aus dem Labor oder anthro data.table, aber gibt es eine war, alle 3 zusammen in ähnlicher Weise zu verschmelzen? Ich habe einige Permutationen versucht, wie

anthro[lab][demo] 

aber dies gibt den Konserven die anthro Informationen nur für die IDs, die im Labor data.table sind - es gibt keine anthro Informationen für IDs 8 und 9

Dank im Voraus für jede Hilfe

+4

+1 für die Bereitstellung der Daten in einem einfach zu verwendenden Format für die Antworten; Ich wünschte, alle hätten das getan. – BrodieG

+0

'B [A]' macht einen Links-Join, keinen vollen Outer-Join ... Wenn das in der Tat das ist, wonach Sie suchen, dann könnten Sie den Titel wahrscheinlich bearbeiten? (Obwohl hier "Demo" alle Werte hat, an denen Sie teilnehmen möchten, funktioniert es wie vorgesehen). – Arun

Antwort

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 

die innere Tabelle ist immer derjenige, der äußere Verknüpfung erfolgt auf, so dass diese Verschachtelung stellt sicher, dass die Tabelle mit dem Super-Set der Indexwerte ist immer die innere Tabelle.

+0

danke - kann nicht glauben, wie einfach die Antwort ist und dass es so offensichtlich ist, nachdem auf mich hingewiesen wurde –