Sostituisci caratteri specifici all’interno delle stringhe

Vorrei rimuovere caratteri specifici da stringhe all’interno di un vettore, simile alla funzione Trova e sostituisci in Excel.

Ecco i dati che inizio con:

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

Comincio solo con la prima colonna; Voglio produrre la seconda colonna rimuovendo le e :

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

Con un’espressione regolare e la funzione gsub() :

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

Quello che gsub fa qui è sostituire ogni occorrenza di "e" con una stringa vuota "" .


Vedi ?regexp gsub o gsub per ulteriore aiuto.

Le espressioni regolari sono i tuoi amici:

 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 

Ora usa gsub() con il modello di sostituzione più semplice ansible: stringa vuota:

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

Riepilogando 2 modi per sostituire le stringhe:

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

1) Usa gsub

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

2) Usa il pacchetto stringr

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

Entrambi produrranno l'output del desiderio:

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

Non è necessario creare frame di dati dal vettore di stringhe, se si desidera sostituire alcuni caratteri in esso. Le espressioni regolari sono una buona scelta perché è già stato menzionato da @Andrie e @Dirk Eddelbuettel.

Prestare attenzione, se si desidera sostituire caratteri speciali, come i punti, è necessario utilizzare la syntax completa delle espressioni regolari, come mostrato nell’esempio seguente:

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

questo produrrà

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

Usa il pacchetto stringi :

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