So führen sie fuzzy matching in r durch (mit beispiel)
Häufig möchten Sie möglicherweise zwei Datensätze in R basierend auf nicht perfekt übereinstimmenden Zeichenfolgen zusammenführen. Dies wird manchmal als Fuzzy-Matching bezeichnet.
Der einfachste Weg, Fuzzy-Matching in R durchzuführen, ist die Verwendung der Funktion stringdist_join() aus dem Paket fuzzyjoin .
Das folgende Beispiel zeigt, wie Sie diese Funktion in der Praxis nutzen können.
Beispiel: Fuzzy-Matching in R
Angenommen, wir haben die folgenden zwei Datenrahmen in R, die Informationen über verschiedene Basketballteams enthalten:
#create data frames df1 <- data. frame (team=c('Mavericks', 'Nets', 'Warriors', 'Heat', 'Lakers'), points=c(99, 90, 104, 117, 100)) df2 <- data. frame (team=c('Mavricks', 'Warrors', 'Heat', 'Netts', 'Kings', 'Lakes'), assists=c(22, 29, 17, 40, 32, 30)) #view data frames print (df1) team points 1 Mavericks 99 2 Nets 90 3 Warriors 104 4 Heat 117 5 Lakers 100 print (df2) team assists 1 Mavricks 22 2 Warriors 29 3 Heat 17 4 Netts 40 5 Kings 32 6 Lakes 30
Nehmen wir nun an, wir möchten eine Linksverknüpfung durchführen, bei der wir alle Zeilen aus dem ersten Datenrahmen behalten und sie einfach basierend auf dem Teamnamen zusammenführen, der im zweiten Datenrahmen am meisten übereinstimmt.
Wir können dazu den folgenden Code verwenden:
library (fuzzyjoin)
library (dplyr)
#perform fuzzy matching left join
stringdist_join(df1, df2,
by=' team ', #match based on team
mode=' left ', #use left join
method = " jw ", #use jw distance metric
max_dist=99,
distance_col=' dist ') %>%
group_by(team.x) %>%
slice_min(order_by=dist, n= 1 )
# A tibble: 5 x 5
# Groups: team.x [5]
team.x points team.y assists dist
1 Heat 117 Heat 17 0
2 Lakers 100 Lakes 30 0.0556
3 Mavericks 99 Mavricks 22 0.0370
4 Nets 90 Nets 40 0.0667
5 Warriors 104 Warriors 29 0.0417
Das Ergebnis ist ein Datenrahmen, der alle ursprünglichen fünf Teamnamen aus dem ersten Datenrahmen sowie das Team enthält, das am ehesten mit dem zweiten Datenrahmen übereinstimmt.
Hinweis Nr. 1 : Wir entscheiden uns für die Verwendung der JW- Distanzmetrik für den Abgleich. Dies ist die Abkürzung für Jaro-Winkler-Distanz , eine Metrik, die den Unterschied zwischen zwei Saiten misst.
Hinweis Nr. 2: Wir haben die Funktion „slice_min()“ aus dem dplyr-Paket verwendet, um nur den Teamnamen aus dem zweiten Datenrahmen anzuzeigen, der am ehesten mit dem Teamnamen aus dem ersten Datenrahmen übereinstimmt.
Zusätzliche Ressourcen
In den folgenden Tutorials wird erläutert, wie Sie andere häufige Aufgaben in R ausführen:
So führen Sie mehrere Datenrahmen in R zusammen
So führen Sie Datenrahmen basierend auf mehreren Spalten in R zusammen