2016-06-17 7 views
2

Diese Frage ist nur zu verstehen, warum dies passieren würde.Merge-Funktion erzeugt Duplikate

ich Zusammenführen von zwei Datenbanken:

bot.rep.geo <- merge(x = bot.rep, y = geo.2016, by = "cod.geo", all.x = TRUE) 

Die ursprünglichen Datenbanken folgende Abmessungen haben: bot.rep hat 1.634.451 Beobachtungen, geo.2016 hat 1393

Nach der Verwendung von all.x = TRUE Zusammenführung die neue Datenbank entsteht mit 1.727.681 , anstelle der gleichen Größe wie bot.rep.

Warum passiert das?

Nach einer kurzen Überprüfung, erkannte ich, dass es einige Duplikate erstellt, aber ich verstehe nicht den Grund und wenn ich etwas falsch mache, während die merge Funktion verwenden.

+3

Wenn Sie 'all.x = TRUE 'wählen, machen Sie das Äquivalent zu einem' LEFT JOIN' in SQL. Dies bedeutet nicht, dass eine bestimmte Zeile von 'bot.rep' nur einmal angezeigt wird. Stattdessen wird es für jede Übereinstimmung in 'cod.geo' einmal angezeigt und jede Zeile in' bot.rep' wird garantiert angezeigt, auch wenn sie zu nichts passt. –

+0

Zeigen Sie uns einige Beispieldaten und das wird klar sein. –

+0

Danke @TimBiegeleisen für die Klärung. Gibt es eine Möglichkeit, dies zu verhindern, oder müssen nur Duplikate entfernt werden? –

Antwort

1

In der Tabelle "geo.2016" können Zeilen vorhanden sein, in denen der cod.geo-Wert zweimal oder öfter erscheint.

Wenn Sie in Ihren bot.rep-Daten einen bot.rep-Wert von "X" haben, dann zwei Zeilen, die in den geo.2016-Daten "X" enthalten, wird die Zusammenführung die Zeile in bot.rep duplizieren und beitreten die 2 Zeilen von geo.2016.

+0

Vielen Dank! Ich verstehe jetzt, warum das passiert. –

1

Dies geschieht wegen one-to-many relationship, x hat mehrere Zeilen in y übereinstimmen.

Siehe Beispiel unten, wo bot.repcod.geo Wert von hat 2 Treffer in geo.2016 Dataset. Daher haben wir 2 Zeilen für 1 ID. Beachten Sie auch, dass wir NA Zeilen für nicht übereinstimmende IDs wegen all.x = TRUE Argument erstellen.

Jetzt müssen Sie entscheiden, welche Zeile ein Duplikat für cod.geo Wert ist.

#dummy data 
bot.rep <- data.frame(cod.geo = 1:4) 
geo.2016 <- data.frame(cod.geo = c(1,1,3,5,6), z = 1:5) 

bot.rep.geo <- merge(x = bot.rep, y = geo.2016, 
        by = "cod.geo", all.x = TRUE) 

# cod.geo z 
# 1  1 1 
# 2  1 2 
# 3  2 NA 
# 4  3 3 
# 5  4 NA 

Sie finden weitere Informationen zu verschiedenen Typen von merge functions here.

+1

@akrun Ich denke nicht, weil es den Grund fragt, warum das passiert, nicht, wie man zusammenführt. Wenn du das Gefühl hast, dass es ein Betrogener ist, dann fühl dich frei zu wählen, um zu schließen, die Flagge zu verwerfen, etc. – zx8754

+0

Ich war nur neugierig, – akrun