Utföra en join med strängavstånd
Att kombinera två olika datakällor är en mycket vanlig uppgift inom dataanalys. När det är möjligt bör du använda tydligt identifierbara värden, som en e-postadress, för att koppla samman två tabeller. Men vad händer om en användare bara angett sitt namn och du måste slå upp det i en användardatabas? Svårigheten är att personer kan förkorta sitt för- eller efternamn, stava fel eller utelämna delar helt.
I scope finns två dataramar: user_input och database. Den första innehåller felaktig användarinmatning och den andra de korrekta namnen – men båda datakällorna innehåller samma 100 namn. Hur många av dem kan du matcha med en join baserad på strängavstånd? Observera att ingen distansmetod (method) har definierats, så standardmetoden Optimal String Alignment-avstånd "osa" används.
Den här övningen är en del av kursen
Reguljära uttryck på mellannivå i R
Övningsinstruktioner
- Koppla samman
user_inputochdatabasemed ett maximalt strängavståndmax_distså att exakt åttio namn matchas. Experimentera tills du hittar rätt maxvärde. - Använd den nyskapade tabellen
joinedför att skriva ut en lättläst rapportmening.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# Join the data frames on a maximum string distance of 2
joined <- stringdist_join(
user_input,
database,
by = c("user_input" = "name"),
___ = ___,
distance_col = "distance",
ignore_case = TRUE
)
# Print the number of rows of the newly created data frame
print(glue(
"{n} out of 100 names were matched successfully",
n = nrow(___)
))