Rimuovere tutti i caratteri speciali da una stringa in R?


118

Come rimuovere tutti i caratteri speciali dalla stringa in R e sostituirli con spazi?

Alcuni caratteri speciali da rimuovere sono: ~!@#$%^&*(){}_+:"<>?,./;'[]-=

Ho provato regexcon il [:punct:]motivo ma rimuove solo i segni di punteggiatura.

Domanda 2: E come rimuovere caratteri da lingue straniere come â í ü Â á ą ę ś ć:?

Risposta: utilizzare [^[:alnum:]]per rimuovere ~!@#$%^&*(){}_+:"<>?,./;'[]-=e utilizzare [^a-zA-Z0-9]per rimuovere anche â í ü Â á ą ę ś ćin regexo regexprfunctions.


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

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

Forse dai un'occhiata a subo gsubfunzioni.
Paul Hiemstra

5
regex [: punct:] farà metà del lavoro o
forse

Risposte:


197

È necessario utilizzare espressioni regolari per identificare i caratteri indesiderati. Per il codice più facilmente leggibile, vuoi il str_replace_alldal stringrpacchetto, sebbene gsubdalla base R funzioni altrettanto bene.

L'espressione regolare esatta dipende da ciò che stai cercando di fare. Potresti semplicemente rimuovere quei caratteri specifici che hai fornito nella domanda, ma è molto più facile rimuovere tutti i caratteri di punteggiatura.

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

(L'equivalente in base R è gsub("[[:punct:]]", " ", x).)

Un'alternativa è sostituire tutti i caratteri non alfanumerici.

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

Nota che la definizione di ciò che costituisce una lettera, un numero o un segno di punteggiatura varia leggermente a seconda della tua lingua, quindi potrebbe essere necessario sperimentare un po 'per ottenere esattamente ciò che desideri.


11
belle risposte +1 Potresti voler sostituire il " "con ""altrimenti hai uno spazio vuoto vuoto nella stringa.
Tyler Rinker

8
@TylerRinker: Vero, anche se QBik ha chiesto specificamente degli spazi.
Richie Cotton

8
Come eliminare remowe quei personaggi folli: â í ü Â á?
Qbik

1
Hai bisogno di leggere le espressioni regolari. Inizia con il link nella mia risposta, quindi leggi ?regexe ?regexpr.
Richie Cotton

1
Prova a sostituire [^[:alnum:]]con [^a-zA-Z0-9]o possibilmente \\W.
Richie Cotton

28

Invece di usare regex per rimuovere quei caratteri "folli", convertili semplicemente in ASCII, che rimuoverà gli accenti, ma manterrà le lettere.

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

che si traduce in

[1] "Abcdeacoauu"

Ho dovuto aggiungere iconv(astr, from="UFT-8", to="ASCII//TRANSLIT"), altrimenti con i caratteri francesi çè un po 'divertente.
Duccio A

8

Converti i caratteri speciali in apostrofo,

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

Di seguito codificalo per rimuovere l'apostrofo extra '' '

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.