2012-04-24 18 views
59

Wie alle Sonderzeichen in einer gegebenen Zeichenfolge in R zu entfernen und jedes Sonderzeichen durch Leerzeichen ersetzen?Entfernen Sie alle Sonderzeichen aus einer Zeichenfolge in R?

Die Sonderzeichen zu entfernen sind: [email protected]#$%^&*(){}_+:"<>?,./;'[]-=

regex [:punct:] wird die Hälfte der Arbeit zu machen.

Question_2: Aber wie zum Beispiel diese Zeichen aus fremden Sprachen zu entfernen: â í ü Â á ą ę ś ć?

ANSWER_2: Ersetzen [^[:alnum:]] mit [^a-zA-Z0-9] in regex oder regexpr:
regex[^a-zA-Z0-9]

+4

Was ist die Definition von "Sonderzeichen"? – kohske

+0

Meine eigene Definition wäre jedes Zeichen, das nicht in Unicode ist ;-). Aber ich denke, viele andere Leute würden dem widersprechen. – Joey

+0

Vielleicht werfen Sie einen Blick auf 'sub' oder' gsub' Funktionen. –

Antwort

116

Sie müssen regular expressions verwenden, um die unerwünschten Zeichen zu identifizieren. Für den am einfachsten lesbaren Code möchten Sie die str_replace_all aus dem stringr Paket, obwohl gsub von Base R genauso gut funktioniert.

Der genaue reguläre Ausdruck hängt davon ab, was Sie zu tun versuchen. Sie könnten nur die spezifischen Zeichen entfernen, die Sie in der Frage angegeben haben, aber es ist viel einfacher, alle Interpunktionszeichen zu entfernen.

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

(Die Basis R entspricht gsub("[[:punct:]]", " ", x).)

Eine Alternative alle nicht-alphanumerischen Zeichen zu tauschen ist.

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

Beachten Sie, dass die Definition dessen, was ein Schreiben darstellt oder eine Zahl oder eine punctuatution Marke variiert je nach Ihrem Standort leicht variieren, so dass Sie ein wenig experimentieren müssen, kann genau das bekommen, was Sie wollen.

+6

nette Antworten +1 Sie können das '' '' mit '" "ersetzen, ansonsten haben Sie einen leeren Leerraum in der Zeichenfolge. –

+4

@TylerRinker: True, obwohl QBik speziell nach Leerzeichen gefragt hat. –

+2

guten Ruf, verpasst das. –

4

Anstatt Regex zu verwenden, um diese "verrückten" Zeichen zu entfernen, wandeln Sie sie einfach in ASCII um, was Akzente entfernt, indem Sie die Buchstaben behalten.

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

was dazu führt,

[1] "Abcdeacoauu" 
0

die Sonderzeichen konvertieren Apostroph,

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

Below Code extra entfernen ''‘Apostroph

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

Verwenden gsub(..) Funktion zum Ersetzen des Sonderzeichens durch Apostroph

Verwandte Themen