Comment utiliser gsub() dans R pour remplacer plusieurs modèles



La fonction gsub() dans R peut être utilisée pour remplacer toutes les occurrences d’un certain modèle dans une chaîne dans R.

Pour remplacer plusieurs modèles à la fois, vous pouvez utiliser une instruction gsub() imbriquée :

df$col1 <- gsub('old1', 'new1',
           gsub('old2', 'new2',
           gsub('old3', 'new3', df$col1)))

Cependant, une méthode beaucoup plus rapide est la fonction stri_replace_all_regex() du package stringi , qui utilise la syntaxe suivante :

library(stringi)

df$col1 <- stri_replace_all_regex(df$col1,
                                  pattern=c('old1', 'old2', 'old3'),
                                  replacement=c('new1', 'new2', 'new3'),
                                  vectorize=FALSE)

Les exemples suivants montrent comment utiliser chaque méthode dans la pratique.

Méthode 1 : remplacer plusieurs modèles par un gsub imbriqué ()

Supposons que nous ayons le bloc de données suivant dans R :

#create data frame
df <- data.frame(name=c('A', 'B', 'B', 'C', 'D', 'D'),
                 points=c(24, 26, 28, 14, 19, 12))

#view data frame
df

  name points
1    A     24
2    B     26
3    B     28
4    C     14
5    D     19
6    D     12 

Nous pouvons utiliser une instruction gsub() imbriquée pour remplacer plusieurs modèles dans la colonne nom :

#replace multiple patterns in name column
df$name <- gsub('A', 'Andy',
           gsub('B', 'Bob',
           gsub('C', 'Chad', df$name)))

#view updated data frame
df

  name points
1 Andy     24
2  Bob     26
3  Bob     28
4 Chad     14
5    D     19
6    D     12

Notez que A, B et C dans la colonne de nom ont tous été remplacés par de nouvelles valeurs.

Méthode 2 : remplacer plusieurs modèles par stringi

Un moyen beaucoup plus rapide de remplacer plusieurs modèles consiste à utiliser la fonction stri_replace_all_regex() du package stringi .

Le code suivant montre comment utiliser cette fonction :

library(stringi)

#replace multiple patterns in name column
df$name <- stri_replace_all_regex(df$name,
                                  pattern=c('A', 'B', 'C'),
                                  replacement=c('Andy', 'Bob', 'Chad'),
                                  vectorize=FALSE)

#view updated data frame
df

  name points
1 Andy     24
2  Bob     26
3  Bob     28
4 Chad     14
5    D     19
6    D     12

Notez que le bloc de données résultant correspond à celui de l’exemple précédent.

Si votre bloc de données est même modérément volumineux, vous remarquerez que cette fonction est beaucoup plus rapide que la fonction gsub() .

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans R :

Comment utiliser la fonction replace() dans R
Comment remplacer conditionnellement les valeurs dans la trame de données R

Ajouter un commentaire

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