Remplacer des caractères spécifiques dans les chaînes

Je voudrais supprimer des caractères spécifiques de chaînes dans un vecteur, similaire à la fonctionnalité Rechercher et remplacer dans Excel.

Voici les données que je commence par:

group <- data.frame(c("12357e", "12575e", "197e18", "e18947") 

Je commence par la première colonne; Je veux produire la deuxième colonne en supprimant les e :

 group group.no.e 12357e 12357 12575e 12575 197e18 19718 e18947 18947 

Avec une expression régulière et la fonction gsub() :

 group <- c("12357e", "12575e", "197e18", "e18947") group [1] "12357e" "12575e" "197e18" "e18947" gsub("e", "", group) [1] "12357" "12575" "19718" "18947" 

Ce que gsub fait ici est de remplacer chaque occurrence de "e" par une chaîne vide "" .


Voir ?regexp gsub ou gsub pour plus d'aide.

Les expressions régulières sont vos amis:

 R> ## also adds missing ')' and sets column name R> group<-data.frame(group=c("12357e", "12575e", "197e18", "e18947")) ) R> group group 1 12357e 2 12575e 3 197e18 4 e18947 

Utilisez maintenant gsub() avec le motif de remplacement le plus simple possible: chaîne vide:

 R> group$groupNoE <- gsub("e", "", group$group) R> group group groupNoE 1 12357e 12357 2 12575e 12575 3 197e18 19718 4 e18947 18947 R> 

Résumant 2 façons de remplacer les chaînes:

 group<-data.frame(group=c("12357e", "12575e", "197e18", "e18947")) 

1) Utilisez gsub

 group$group.no.e <- gsub("e", "", group$group) 

2) Utilisez le paquet ssortingngr

 group$group.no.e <- str_replace_all(group$group, "e", "") 

Les deux produiront la sortie désirée:

  group group.no.e 1 12357e 12357 2 12575e 12575 3 197e18 19718 4 e18947 18947 

Vous n’avez pas besoin de créer un bloc de données à partir d’un vecteur de chaînes, si vous souhaitez y remplacer certains caractères. Les expressions régulières sont un bon choix car elles ont déjà été mentionnées par @Andrie et @Dirk Eddelbuettel.

Faites attention, si vous voulez remplacer des caractères spéciaux, comme des points, vous devez utiliser une syntaxe d’expression régulière complète, comme illustré dans l’exemple ci-dessous:

 ctr_names <- c("Czech.Republic","New.Zealand","Great.Britain") gsub("[.]", " ", ctr_names) 

cela produira

 [1] "Czech Republic" "New Zealand" "Great Britain" 

Utilisez le paquet ssortingngi :

 require(ssortingngi) group<-data.frame(c("12357e", "12575e", "197e18", "e18947")) stri_replace_all(group[,1], "", fixed="e") [1] "12357" "12575" "19718" "18947"