2016-11-03 3 views
0

Ich möchte alle Umlaute (Deutsch) in meinem Text ersetzen. Hier ist der Teil meines Textes:Ersatz von großen und kleinen Buchstaben in R (gsub)

temp.RData enthalten die täglichen Niederschlagsmengen\nund die stündlichen Durchschnittstemperaturen von 1.7.2016 (1 Uhr) bis\n26.9.2016 

Deshalb möchte ich alle Buchstaben wie ä, ü und ö durch ihre Englisch-Analoga ersetzen (ae, ue, oe)

Hier ist mein Code:

text <- gsub(pattern = '[Ää]',replacement = "ae",text) 
text <- gsub(pattern = '[Üü]',replacement = "ue",text) 
text <- gsub(pattern = '[Öö]',replacement = "oe",text) 

Alles funktioniert gut, nur dass Bitumschläge (Ä, Ü, Ö) durch Analoga ersetzt wurden, die von Kleinbuchstaben ausgehen. Aber ich möchte Ä durch Ae (nicht ae) ersetzen. Wie kann ich das nur mit regex in R tun?

+3

Ist es nicht die gleiche Frage, Danil? http://stackoverflow.com/questions/40323219/replacing-all-umlauts-simultan-in-r-using-regex/40323338#40323338 –

Antwort

2

Der einfachste Weg, vor allem wenn man selektiv, sein wollen, ist es zu trennen:

text <- gsub(pattern = '[ä]',replacement = "ae",text) 
text <- gsub(pattern = '[ü]',replacement = "ue",text) 
text <- gsub(pattern = '[ö]',replacement = "oe",text) 
text <- gsub(pattern = '[Ä]',replacement = "Ae",text) 
text <- gsub(pattern = '[Ü]',replacement = "Ue",text) 
text <- gsub(pattern = '[Ö]',replacement = "Oe",text) 

Wenn Sie eine effizientere Art und Weise möchten, können Sie stringr

library(stringr) 
str_replace_all(text, c('ä' = 'ae', 'ë' = 'ee', 'ï' = 'ie', 'ö' = 'oe', 
         'ü' = 'ue', 'Ä' = 'Ae', 'Ë' = 'Ee', 'Ï' = 'Ie', 
         'Ö' = 'Oe', 'Ü' = 'Ue')) 
0

hier ein ist verwenden können schnellere und sparsamere Methode mit dem Unicode-Smart String Paket:

txt <- "A: Äbel bäbel, O: Öber öber, U: Über über gemütlich" 
stringi:: stri_replace_all_fixed(txt, 
           c("ä", "ü", "ö", "Ä", "Ü", "Ö"), 
           c("ae", "ue", "oe", "Ae", "Ue", "Oe"), 
           vectorize_all = FALSE) 
## [1] "A: Aebel baebel, O: Oeber oeber, U: Ueber ueber gemuetlich" 

Die vectorize_all = FALSE bedeutet, dass Ihre Ersetzungen Element-für-Element sind, und dies zu einem festen Muster Ersatz macht es so schnell wie möglich.