Update verbinden. Eine weitere wichtige SQL-Verknüpfung ist eine " Update verbinden ", bei dem Spalten in einer Tabelle mit Hilfe einer anderen Tabelle aktualisiert (oder erstellt) werden.
Modifizierung der Beispieltabellen des Auftraggebers...
sales = data.frame(
CustomerId = c(1, 1, 1, 3, 4, 6),
Year = 2000:2005,
Product = c(rep("Toaster", 3), rep("Radio", 3))
)
cust = data.frame(
CustomerId = c(1, 1, 4, 6),
Year = c(2001L, 2002L, 2002L, 2002L),
State = state.name[1:4]
)
sales
# CustomerId Year Product
# 1 2000 Toaster
# 1 2001 Toaster
# 1 2002 Toaster
# 3 2003 Radio
# 4 2004 Radio
# 6 2005 Radio
cust
# CustomerId Year State
# 1 2001 Alabama
# 1 2002 Alaska
# 4 2002 Arizona
# 6 2002 Arkansas
Angenommen, wir wollen den Status des Kunden aus cust
zur Tabelle der Einkäufe, sales
ohne Berücksichtigung der Jahresspalte. Mit Base R können wir übereinstimmende Zeilen identifizieren und dann Werte rüberkopieren:
sales$State <- cust$State[ match(sales$CustomerId, cust$CustomerId) ]
# CustomerId Year Product State
# 1 2000 Toaster Alabama
# 1 2001 Toaster Alabama
# 1 2002 Toaster Alabama
# 3 2003 Radio <NA>
# 4 2004 Radio Arizona
# 6 2005 Radio Arkansas
# cleanup for the next example
sales$State <- NULL
Wie hier zu sehen ist, match
wählt die erste passende Zeile aus der Kundentabelle aus.
Update Join mit mehreren Spalten. Der obige Ansatz funktioniert gut, wenn wir nur eine einzige Spalte verbinden und mit der ersten Übereinstimmung zufrieden sind. Angenommen, das Jahr der Messung in der Kundentabelle soll mit dem Jahr des Verkaufs übereinstimmen.
Wie in der Antwort von @bgoldst erwähnt, match
avec interaction
könnte eine Option für diesen Fall sein. Einfacher wäre es, data.table zu verwenden:
library(data.table)
setDT(sales); setDT(cust)
sales[, State := cust[sales, on=.(CustomerId, Year), x.State]]
# CustomerId Year Product State
# 1: 1 2000 Toaster <NA>
# 2: 1 2001 Toaster Alabama
# 3: 1 2002 Toaster Alaska
# 4: 3 2003 Radio <NA>
# 5: 4 2004 Radio <NA>
# 6: 6 2005 Radio <NA>
# cleanup for next example
sales[, State := NULL]
Rolling Update beitreten. Alternativ kann auch der letzte Zustand des Kunden herangezogen werden, in dem er angetroffen wurde:
sales[, State := cust[sales, on=.(CustomerId, Year), roll=TRUE, x.State]]
# CustomerId Year Product State
# 1: 1 2000 Toaster <NA>
# 2: 1 2001 Toaster Alabama
# 3: 1 2002 Toaster Alaska
# 4: 3 2003 Radio <NA>
# 5: 4 2004 Radio Arizona
# 6: 6 2005 Radio Arkansas
Die drei obigen Beispiele beziehen sich alle auf das Erstellen/Hinzufügen einer neuen Spalte. Siehe die zugehörige R-FAQ für ein Beispiel zur Aktualisierung/Änderung einer bestehenden Spalte.
2 Stimmen
Der Spickzettel "Data Transformation with dplyr", der von RStudio erstellt und gepflegt wird, enthält auch schöne Infografiken darüber, wie Joins in dplyr funktionieren rstudio.com/resources/cheatsheets
5 Stimmen
Wenn Sie stattdessen hierher gekommen sind, um etwas über die Zusammenlegung von Pandas Dataframes, diese Ressource kann gefunden werden aquí .
1 Stimmen
Für @isomorphismes Link ist hier eine aktuelle archivierte Version: web.archive.org/web/20190312112515/http://stat545.com/…