Jak wykonać dopasowanie rozmyte w r (z przykładem)
Często możesz chcieć połączyć dwa zestawy danych w R w oparciu o niedokładnie pasujące ciągi. Nazywa się to czasami dopasowaniem rozmytym .
Najłatwiejszym sposobem przeprowadzenia dopasowywania rozmytego w R jest użycie funkcji stringdist_join() z pakietu fuzzyjoin .
Poniższy przykład pokazuje, jak w praktyce wykorzystać tę funkcję.
Przykład: dopasowanie rozmyte w R
Załóżmy, że w R mamy dwie ramki danych zawierające informacje o różnych drużynach koszykówki:
#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
Załóżmy teraz, że chcemy wykonać lewe złączenie , w którym zachowamy wszystkie wiersze z pierwszej ramki danych i po prostu połączymy je w oparciu o nazwę zespołu, która najbardziej pasuje do drugiej ramki danych.
Możemy w tym celu użyć następującego kodu:
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
Rezultatem jest ramka danych zawierająca każdą z pięciu oryginalnych nazw zespołów z pierwszej ramki danych, a także zespół, który najbardziej pasuje do drugiej ramki danych.
Uwaga nr 1 : Do dopasowywania wybieramy metrykę odległości jw . Jest to skrót od odległości Jaro-Winklera , która jest metryką mierzącą różnicę między dwoma ciągami znaków.
Uwaga nr 2: Użyliśmy funkcji plaster_min() z pakietu dplyr, aby wyświetlić tylko nazwę zespołu z drugiej ramki danych, która najbardziej odpowiada nazwie zespołu z pierwszej ramki danych.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w języku R:
Jak połączyć wiele ramek danych w R
Jak scalić ramki danych na podstawie wielu kolumn w R