Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Join user_input en database met een maximale tekenafstand max_dist zodat precies tachtig namen succesvol worden gematcht. Experimenteer totdat je de juiste maximale afstand vindt.
  • Gebruik de nieuw gemaakte tabel joined om 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(___)
))
Code bewerken en uitvoeren