2013-12-10 3 views
14

Ich habe einige Zeichen in R in UTF-8-Codierung, die Akzente enthalten. Zum Beispiel string="Hølmer" oder string="Elizalde-González"Akzentuierte Zeichen in R durch nicht akzentuiertes Gegenstück ersetzen (UTF-8-Codierung)

Gibt es eine nette Funktion in R, die akzentuierten Zeichen in diesen Strings durch ihre unbetonten Gegenstück zu ersetzen? Ich sah einige Lösungen in PHP here, aber wie mache ich das in R?

z. der PHP-Code

schien ganz nett - aber wie würde ich das in R tun?

Antwort

29

Die folgenden Antworten sind im Wesentlichen von anderswo übernommen. Der Schlüssel ist Ihre unwanted_array im richtigen Format zu bekommen. Vielleicht haben Sie es wollen als list:

unwanted_array = list( 'Š'='S', 'š'='s', 'Ž'='Z', 'ž'='z', 'À'='A', 'Á'='A', 'Â'='A', 'Ã'='A', 'Ä'='A', 'Å'='A', 'Æ'='A', 'Ç'='C', 'È'='E', 'É'='E', 
          'Ê'='E', 'Ë'='E', 'Ì'='I', 'Í'='I', 'Î'='I', 'Ï'='I', 'Ñ'='N', 'Ò'='O', 'Ó'='O', 'Ô'='O', 'Õ'='O', 'Ö'='O', 'Ø'='O', 'Ù'='U', 
          'Ú'='U', 'Û'='U', 'Ü'='U', 'Ý'='Y', 'Þ'='B', 'ß'='Ss', 'à'='a', 'á'='a', 'â'='a', 'ã'='a', 'ä'='a', 'å'='a', 'æ'='a', 'ç'='c', 
          'è'='e', 'é'='e', 'ê'='e', 'ë'='e', 'ì'='i', 'í'='i', 'î'='i', 'ï'='i', 'ð'='o', 'ñ'='n', 'ò'='o', 'ó'='o', 'ô'='o', 'õ'='o', 
          'ö'='o', 'ø'='o', 'ù'='u', 'ú'='u', 'û'='u', 'ý'='y', 'ý'='y', 'þ'='b', 'ÿ'='y') 

du mit iconv oder chartr leicht tun können:

> iconv(string, to='ASCII//TRANSLIT') 
[1] "Holmer" 

> chartr(paste(names(unwanted_array), collapse=''), 
     paste(unwanted_array, collapse=''), 
     string) 
[1] "Holmer" 

Ansonsten haben Sie durch alle Alternativen zu Schleife, weil mapply oder ähnliches würde nicht erklären Symbole bereits ersetzt durch vorherige gsub Operationen .:

# the loop: 
out <- string 
for(i in seq_along(unwanted_array)) 
    out <- gsub(names(unwanted_array)[i],unwanted_array[i],out) 

Das Ergebnis:

> out 
[1] "Holmer" 
+2

Ha vielen Dank! Ich hatte die anderen Threads nicht gesehen - sorry dafür ... iconv (string von = "UTF-8", bis = "ASCII // TRANSLIT") hat den Trick für mich gemacht! Vielen Dank! –

9

Eine weitere Option ist gsubfn Paket zu verwenden:

library(gsubfn) 
string="Hølmer" 
gsubfn(paste(names(unwanted_array),collapse='|'), unwanted_array,string) 
[1] "Holmer" 
+0

Einige Leistungsprobleme mit dieser Lösung – snoram

Verwandte Themen