Come eseguire la corrispondenza fuzzy in r (con esempio)
Spesso potresti voler unire due set di dati in R in base a stringhe che corrispondono in modo imperfetto. Questo a volte viene chiamato corrispondenza fuzzy .
Il modo più semplice per eseguire la corrispondenza fuzzy in R è utilizzare la funzione stringdist_join() dal pacchetto fuzzyjoin .
L’esempio seguente mostra come utilizzare questa funzione nella pratica.
Esempio: corrispondenza fuzzy in R
Supponiamo di avere i seguenti due frame di dati in R che contengono informazioni su varie squadre di basket:
#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
Ora supponiamo di voler eseguire un left join in cui manteniamo tutte le righe del primo frame di dati e le uniamo semplicemente in base al nome della squadra che corrisponde di più nel secondo frame di dati.
Possiamo usare il seguente codice per fare questo:
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
Il risultato è un frame di dati contenente ciascuno dei cinque nomi di squadra originali del primo frame di dati, nonché la squadra che corrisponde maggiormente al secondo frame di dati.
Nota n. 1 : scegliamo di utilizzare la metrica della distanza jw per la corrispondenza. Questo è l’abbreviazione di distanza Jaro-Winkler , che è una metrica che misura la differenza tra due stringhe.
Nota n.2: abbiamo utilizzato la funzione slice_min() del pacchetto dplyr per visualizzare solo il nome della squadra del secondo frame di dati che corrispondeva maggiormente al nome della squadra del primo frame di dati.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni in R:
Come unire più frame di dati in R
Come unire frame di dati basati su più colonne in R