2012-04-24 8 views
59

Come rimuovere tutti i caratteri speciali in una determinata stringa in R e sostituire ogni carattere speciale con lo spazio?Rimuovere tutti i caratteri speciali da una stringa in R?

I caratteri speciali per rimuovere sono: [email protected]#$%^&*(){}_+:"<>?,./;'[]-=

regex [:punct:] sta andando a fare metà del lavoro.

Question_2: Ma come rimuovere ad esempio questi caratteri dalle lingue straniere: â í ü Â á ą ę ś ć?

ANSWER_2: Sostituire [^[:alnum:]] con [^a-zA-Z0-9] in regex o regexpr:
regex[^a-zA-Z0-9]

+4

Qual è la definizione di "carattere speciale"? – kohske

+0

La mia definizione sarebbe ogni carattere che non è in Unicode ;-). Ma immagino che molte altre persone non sarebbero d'accordo. – Joey

+0

Forse date un'occhiata alle funzioni 'sub' o' gsub'. –

risposta

116

è necessario utilizzare regular expressions per identificare i caratteri indesiderati. Per il codice più facilmente leggibile, si desidera il str_replace_all dal pacchetto stringr, anche se gsub dalla base R funziona altrettanto bene.

L'espressione regolare esatta dipende da ciò che si sta tentando di fare. Puoi semplicemente rimuovere quei caratteri specifici che hai inserito nella domanda, ma è molto più facile rimuovere tutti i caratteri di punteggiatura.

x <- "[email protected]#$%^&*(){}_+:\"<>?,./;'[]-=" #or whatever 
str_replace_all(x, "[[:punct:]]", " ") 

(La base R equivalente è gsub("[[:punct:]]", " ", x).)

Un'alternativa è di scambiare tutti i caratteri non alfanumerici.

str_replace_all(x, "[^[:alnum:]]", " ") 

nota che la definizione di ciò che costituisce una lettera o un numero o un segno punctuatution varia leggermente a seconda del proprio locale, quindi potrebbe essere necessario sperimentare un po 'per ottenere esattamente quello che vuoi.

+6

belle risposte +1 Si potrebbe voler sostituire il "" "con' "" 'altrimenti si ha uno spazio bianco vuoto nella stringa. –

+4

@TylerRinker: è vero, anche se QBik ha chiesto specificamente spazi. –

+2

buona chiamata, persa quello. –

4

Invece di usare espressioni regolari per rimuovere quei caratteri "pazzi", basta convertirli in ASCII, che rimuoverà gli accenti, mantenendo le lettere.

astr <- "Ábcdêãçoàúü" 
iconv(astr, to = "ASCII//TRANSLIT") 

che si traduce in

[1] "Abcdeacoauu" 
0

Convertire i caratteri speciali per Apostrophe,

Data <- gsub("[^0-9A-Za-z///' ]","'" , Data ,ignore.case = TRUE) 

Di seguito il codice per rimuovere extra ''' apostrofo

Data <- gsub("''","" , Data ,ignore.case = TRUE) 

Usa gsub(..) funzione per sostituire il carattere speciale con apostrofo