Een join op basis van tekenafstand uitvoeren
Twee verschillende gegevensbronnen samenbrengen is een heel gebruikelijke taak in data-analyse. Waar mogelijk gebruik je duidelijk identificeerbare waarden, zoals een e-mailadres, om twee tabellen aan elkaar te koppelen. Maar wat als een gebruiker alleen zijn of haar naam heeft ingevoerd en jij deze in een gebruikersdatabase moet opzoeken? Het lastige is: mensen kunnen hun voor- of achternaam afkorten, een tikfout maken, of delen helemaal weglaten.
In de scope staan twee data frames: user_input en database. De eerste bevat de foutgevoelige gebruikersinvoer en de tweede de correcte namen, maar beide bronnen bevatten dezelfde 100 namen. Hoeveel daarvan kun je matchen met een join op basis van tekenafstand? Trouwens: Er is geen afstands-method gedefinieerd, dus de standaard, Optimal String Alignment-afstand "osa", wordt gebruikt.
Deze oefening maakt deel uit van de cursus
Gevorderde reguliere expressies in R
Oefeninstructies
- Join
user_inputendatabasemet een maximale tekenafstandmax_distzodat precies tachtig namen succesvol worden gematcht. Experimenteer totdat je de juiste maximale afstand vindt. - Gebruik de nieuw gemaakte tabel
joinedom een mensvriendelijke rapportzin te printen.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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(___)
))