R : vérifier si la ligne d’un bloc de données existe dans un autre



Vous pouvez utiliser la syntaxe suivante pour ajouter une nouvelle colonne à un bloc de données dans R qui indique si chaque ligne existe dans un autre bloc de données :

df1$exists <- do.call(paste0, df1) %in% do.call(paste0, df2)

Cette syntaxe particulière ajoute une colonne appelée exist au bloc de données appelé df1 qui contient TRUE ou FALSE pour indiquer si chaque ligne de df1 existe dans un autre bloc de données appelé df2 .

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

Exemple : vérifier si la ligne d’un bloc de données existe dans un autre dans R

Supposons que nous ayons les deux trames de données suivantes dans R :

#create first data frame
df1 <- data.frame(team=c('A', 'B', 'C', 'D', 'E'),
                  points=c(12, 15, 22, 29, 24))

#view first data frame
df1

  team points
1    A     12
2    B     15
3    C     22
4    D     29
5    E     24

#create second data frame
df2 <- data.frame(team=c('A', 'D', 'F', 'G', 'H'),
                  points=c(12, 29, 15, 19, 10))

#view second data frame
df2

  team points
1    A     12
2    D     29
3    F     15
4    G     19
5    H     10

Nous pouvons utiliser la syntaxe suivante pour ajouter une colonne appelée exist au premier bloc de données qui indique si chaque ligne existe dans le deuxième bloc de données :

#add new column to df1 that shows if row exists in df2
df1$exists <- do.call(paste0, df1) %in% do.call(paste0, df2)

#view updated data frame
df1

  team points exists
1    A     12   TRUE
2    B     15  FALSE
3    C     22  FALSE
4    D     29   TRUE
5    E     24  FALSE

La nouvelle colonne existe indique si chaque ligne du premier bloc de données existe dans le deuxième bloc de données.

À partir du résultat, nous pouvons voir :

  • La première ligne de df1 existe dans df2 .
  • La deuxième ligne de df1 n’existe pas dans df2 .
  • La troisième ligne de df1 n’existe pas dans df2 .

Et ainsi de suite.

Notez que vous pouvez également utiliser is.numeric() pour afficher les 1 et les 0 au lieu de TRUE ou FALSE dans la colonne exist :

#add new column to df1 that shows if row exists in df2
df1$exists <- as.numeric(do.call(paste0, df1) %in% do.call(paste0, df2))

#view updated data frame
df1

  team points exists
1    A     12      1
2    B     15      0
3    C     22      0
4    D     29      1
5    E     24      0

Une valeur de 1 indique que la ligne du premier bloc de données existe dans le second.

À l’inverse, une valeur de 0 indique que la ligne de la première trame de données n’existe pas dans la seconde.

Ressources additionnelles

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

R : Comment vérifier si plusieurs colonnes sont égales
R : Comment sélectionner des lignes uniques dans un bloc de données
R : Comment répliquer des lignes dans un bloc de données

Ajouter un commentaire

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