Datenrahmen in R zusammenführen: Vollständige und teilweise Übereinstimmung

Sehr oft verfügen wir über Daten aus mehreren Quellen. Um eine Analyse durchzuführen, müssen wir Folgendes tun fusionieren zwei Datenrahmen zusammen mit einem oder mehreren gemeinsame Schlüsselvariablen.

In diesem Tutorial lernst du

Gesamtes Spiel

Eine vollständige Übereinstimmung gibt Werte zurück, die ein Gegenstück in der Zieltabelle haben. Die nicht übereinstimmenden Werte werden im neuen Datenrahmen nicht zurückgegeben. Die teilweise Übereinstimmung gibt jedoch die fehlenden Werte als NA zurück.

Wir werden ein einfaches sehen innere Verbindung. Das Schlüsselwort „Inner Join“ wählt Datensätze aus, die in beiden Tabellen übereinstimmende Werte haben. Um zwei Datensätze zu verbinden, können wir die Funktion merge() verwenden. Wir werden drei Argumente verwenden:

merge(x, y, by.x = x, by.y = y)

Arguments:
-x: The origin data frame
-y: The data frame to merge
-by.x: The column used for merging in x data frame. Column x to merge on
-by.y: The column used for merging in y data frame. Column y to merge on

Ejemplo:

Erstellen Sie den ersten Datensatz mit Variablen

  • Familien-oder Nachname
  • Staatsangehörigkeit

Erstellen Sie einen zweiten Datensatz mit Variablen

  • Familien-oder Nachname
  • Filme

Die gemeinsame Schlüsselvariable ist Nachname. Wir können beide Daten zusammenführen und prüfen, ob die Dimensionalität 7×3 beträgt.

Wir fügen stringsAsFactors=FALSE in den Datenrahmen ein, weil wir das nicht wollen R Um eine Zeichenfolge als Faktor umzuwandeln, möchten wir, dass die Variable als Zeichen behandelt wird.

# Create origin dataframe(

producers <- data.frame(   
    surname =  c("Spielberg","Scorsese","Hitchcock","Tarantino","Polanski"),    
    nationality = c("US","US","UK","US","Poland"),    
    stringsAsFactors=FALSE)

# Create destination dataframe
movies <- data.frame(    
    surname = c("Spielberg",
		"Scorsese",
                "Hitchcock",
              	"Hitchcock",
                "Spielberg",
                "Tarantino",
                "Polanski"),    
    title = c("Super 8",
    		"Taxi Driver",
    		"Psycho",
    		"North by Northwest",
    		"Catch Me If You Can",
    		"Reservoir Dogs","Chinatown"),                
     		stringsAsFactors=FALSE)

# Merge two datasets
m1 <- merge(producers, movies, by.x = "surname")
m1
dim(m1)

Ausgang:

surname		nationality		title
1 Hitchcock		UK		Psycho
2 Hitchcock		UK		North by Northwest
3 Polanski		Poland		Chinatown
4 Scorsese		US		Taxi Driver
5 Spielberg		US		Super 8
6 Spielberg		US		Catch Me If You Can
7 Tarantino		US		Reservoir Dogs

Lassen Sie uns Datenrahmen zusammenführen, wenn die gemeinsamen Schlüsselvariablen unterschiedliche Namen haben.

Im Filmdatenrahmen ändern wir den Nachnamen in den Vornamen. Wir verwenden die Funktion identisch(x1, x2), um zu prüfen, ob beide Datenrahmen identisch sind.

# Change name of ` movies ` dataframe
colnames(movies)[colnames(movies) == 'surname'] <- 'name'
# Merge with different key value
m2 <- merge(producers, movies, by.x = "surname", by.y = "name")
# Print head of the data
head(m2)

Ausgang:

##surname     nationality		title
## 1 Hitchcock          UK		Psycho
## 2 Hitchcock          UK		North by Northwest
## 3 Polanski          Poland		Chinatown
## 4 Scorsese           US		Taxi Driver
## 5 Spielberg          US		Super 8
## 6 Spielberg          US		Catch Me If You Can
# Check if data are identical
identical(m1, m2)

Ausgang:

## [1] TRUE

Dies zeigt, dass der Zusammenführungsvorgang auch dann ausgeführt wird, wenn die Spaltennamen unterschiedlich sind.

Teilweise Übereinstimmung

Es ist nicht überraschend, dass zwei Datenrahmen nicht dieselben gemeinsamen Schlüsselvariablen haben. Im volle Übereinstimmung, der Datenrahmen kehrt zurück einzige Zeilen, die sowohl im x- als auch im y-Datenrahmen gefunden werden. Mit teilweises Zusammenführenist es möglich, die Zeilen ohne übereinstimmende Zeilen im anderen Datenrahmen beizubehalten. Diese Zeilen haben NA in den Spalten, die normalerweise mit Werten von y gefüllt sind. Das können wir erreichen, indem wir all.x= TRUE setzen.

Beispielsweise können wir einen neuen Produzenten, Lucas, im Produzentendatenrahmen hinzufügen, ohne die Filmreferenzen im Filmdatenrahmen. Wenn wir all.x= FALSE setzen, verknüpft R nur die übereinstimmenden Werte in beiden Datensätzen. In unserem Fall wird der Produzent Lucas nicht an der Zusammenführung teilnehmen, da er in einem Datensatz fehlt.

Sehen wir uns die Dimension jeder Ausgabe an, wenn wir all.x= TRUE angeben und wenn nicht.

# Create a new producer
add_producer <-  c('Lucas', 'US')
#  Append it to the ` producer` dataframe
producers <- rbind(producers, add_producer)
# Use a partial merge 
m3 <-merge(producers, movies, by.x = "surname", by.y = "name", all.x = TRUE)
m3

Ausgang:

Teilweise Übereinstimmung

# Compare the dimension of each data frame
dim(m1)

Ausgang:

## [1] 7 3
dim(m2)

Ausgang:

## [1] 7 3
dim(m3)

Ausgang:

## [1] 8 3

Wie wir sehen können, beträgt die Dimension des neuen Datenrahmens 8×3 im Vergleich zu 7×3 für m1 und m2. R schließt NA für den fehlenden Autor im Buchdatenrahmen ein.