Personnaliser les préférences

Nous utilisons des cookies pour vous aider à naviguer efficacement et à exécuter certaines fonctions. Vous trouverez ci-dessous des informations détaillées sur tous les cookies sous chaque catégorie de consentement.

Les cookies classés comme « Nécessaires » sont stockés sur votre navigateur car ils sont essentiels pour activer les fonctionnalités de base du site.... 

Toujours actif

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

Aucun cookie à afficher.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

Aucun cookie à afficher.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

Aucun cookie à afficher.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

Aucun cookie à afficher.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

Aucun cookie à afficher.

Comment effectuer une correspondance floue dans R (avec exemple)



Souvent, vous souhaiterez peut-être réunir deux ensembles de données dans R sur la base de chaînes imparfaitement correspondantes. C’est ce qu’on appelle parfois la correspondance floue .

Le moyen le plus simple d’effectuer une correspondance floue dans R consiste à utiliser la fonction stringdist_join() du package fuzzyjoin .

L’exemple suivant montre comment utiliser cette fonction dans la pratique.

Exemple : correspondance floue dans R

Supposons que nous ayons les deux trames de données suivantes dans R qui contiennent des informations sur diverses équipes de basket-ball :

#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  Warrors      29
3     Heat      17
4    Netts      40
5    Kings      32
6    Lakes      30

Supposons maintenant que nous souhaitions effectuer une jointure gauche dans laquelle nous conservons toutes les lignes du premier bloc de données et les fusionnons simplement en fonction du nom de l’équipe qui correspond le plus dans le deuxième bloc de données.

Nous pouvons utiliser le code suivant pour ce faire :

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 Netts         40 0.0667
5 Warriors     104 Warrors       29 0.0417

Le résultat est une trame de données contenant chacun des cinq noms d’équipe d’origine de la première trame de données ainsi que l’équipe qui correspond le plus à la seconde trame de données.

Remarque n°1 : Nous avons choisi d’utiliser la métrique de distance jw pour la correspondance. C’est l’abréviation de la distance Jaro-Winkler , qui est une métrique qui mesure la différence entre deux chaînes.

Remarque n°2 : Nous avons utilisé la fonction slice_min() du package dplyr pour afficher uniquement le nom de l’équipe de la deuxième trame de données qui correspondait le plus au nom de l’équipe de la première trame de données.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans R :

Comment fusionner plusieurs trames de données dans R
Comment fusionner des blocs de données basés sur plusieurs colonnes dans R

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *