2012-11-21 24 views
11

Nur frage mich, ob es ein effizienter Weg ist mit Datentabelle wieäußere Verknüpfung data.table R

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) 

das funktioniert gut zu tun Outer-Joins, aber es ist nicht so effizient wie die innere mit größeren Daten beitreten , denn das folgende läuft sehr schnell, aber das obige ist wirklich langsam.

setkey(a,a) 
setkey(b,a) 
a[b,] 
+0

Im ersten Fall sind 'a' und' b' unkeyed, so dass 'merge' die Schlüssel zuerst (als lokale Kopien innerhalb von merge) eingeben muss, da es 'a' und' nicht ändern will b 'im Aufrufbereich). Im zweiten Fall waren Sie glücklich, 'a' und' b' zu ändern, indem Sie sie eintippen (haben Sie die Zeit dafür angegeben?) Und dann ist 'a [b]' schnell. Aber selbst wenn ich überrascht bin, gibt es einen großen Unterschied. "Zusammenführen" sollte mit "x [y]" vergleichbar sein. Bitte geben Sie Versionsinformationen an, wenn Sie über Timings sprechen: Sind Sie auf v1.8.6? Und auch deine "sehr schnell" und "sehr langsam" könnte meine Vorstellung von "ähnlich" sein! Wie sind die tatsächlichen Zeiten? –

+0

Es ist sehr einfach, schlecht/unpassend zu benchmarken, also müssen wir definitiv Ihre Methode des Timings sehen, bevor Sie irgendetwas sagen. –

+0

Ich konnte dafür keine Zeit bereitstellen, da der erste im Speicher explodierte und die R-Sitzung abstürzte (um 19m Zeilen). Ich werde es mit einem kleineren Set benchmarken und die Ergebnisse veröffentlichen. (Version 1.8.2, verwende ich) – jamborta

Antwort

10

b[a,] ist die "Outer-Joins" Sie suchen.

Werfen Sie einen Blick auf ?merge.data.table für weitere Informationen.

+0

danke! Also ist a [b,] oder b [a,] im Wesentlichen ein linker Join (in SQL-Begriffen)? Ich habe immer darüber nachgedacht. – jamborta

+0

@jamborta Siehe FAQ 2.16 ('nomatch = 0 | NA') –

+1

danke Matthew, das erklärt es. Ich nehme an, dass du auf diese Weise keinen vollständigen äußeren Join (nur links außen und innen) machen kannst? – jamborta

Verwandte Themen