Kapitel 55 Umlaute und Sonderzeichen

Wenn wir in Deutsch oder Französisch in R arbeiten, werden wir uns öfters über Umlaute und Sonderzeichen ärgern.

In den meisten Fällen genügt es, die richtigen Optionen in RStudio zu wählen oder beim importieren von Dateien die richtigen Argumtente (Optionen) bei den Befehlen zu wählen. Manchmal sind die Probleme etwas hartnäckiker, was vor allem mit unseren Computersystemen zu tun hat, so kann ein Skript auf verschiedenen Computern zu anderen Ergebnissen führen.

Für diese Übung erstellen wir ein Datensatz mit Sonderzeichen

Désignation<-c("écureils", "Eichhörnchen", "Squirrel")
Langage<-c("français", "allemande","anglais")

dataframe<-data.frame(Désignation, Langage)

rio::export(dataframe, "éducation_façon_de_parler_Übungen.csv")
rio::export(dataframe, "éducation_façon_de_parler_Übungen.xlsx")

Wenn Sie die Übung auf ihrem Computer machen wollen, so können Sie den Code oben kopieren und in ihrem RStudio laufen lassen. R wird die Daten im working directory speichern.

Nun haben wir zwei Dateien mit den Namen in unserem working directory:

  • éducation_façon_de_parler_Übungen.csv
  • éducation_façon_de_parler_Übungen.xlsx

Wir können jetzt diese Datei in unser Environment in RStudio laden, und wir sehen, dass wir ein Problem mit den Buchstaben haben.

  data_from_csv_with_base<-read.csv("éducation_façon_de_parler_Übungen.csv")
  head(data_from_csv_with_base)
##    Désignation   Langage
## 1     écureils  français
## 2 Eichhörnchen allemande
## 3     Squirrel   anglais
Wir könnten jetzt in der Hilfe zum Befehl read.csv eine Lösung suchen. Wir könnten in der Konsole ?read.csv tippen.

Wir sehen, dass wir das Argument, encoding =“UTF-8” anfügen müssen.

data_from_csv_with_base_encoding<-read.csv("éducation_façon_de_parler_Übungen.csv", encoding = "UTF-8")
  head(data_from_csv_with_base_encoding) 
##    Désignation   Langage
## 1     écureils  français
## 2 Eichhörnchen allemande
## 3     Squirrel   anglais
data_from_csv_with_base_encoding_corrected<-read.csv("éducation_façon_de_parler_Übungen.csv", encoding = "UTF-8")
  head(data_from_csv_with_base_encoding_corrected)
##    Désignation   Langage
## 1     écureils  français
## 2 Eichhörnchen allemande
## 3     Squirrel   anglais

Jetzt stimmt es in beiden Dateien. Achtung: Es kann - je nach Computersystem - trotzdem falsch sein und es wird nicht immer einfach sein, eine Lösung zu finden.

Ich benutze eigentlich immer die Variante import aus dem Paket rio - doch ganz selten stürzt mein Computer mit den rio Befehlen import und export ab, also ist es gut, alternative Möglichkeiten zu kennen:

Aber auch da, je nach Computer, kann es zu Problemen kommen. Auf meinem Computer läuft diese Variante nicht korrekt:

library(readr)
  data_from_csv_readr<-read_csv("éducation_façon_de_parler_Übungen.csv", locale(encoding="UTF-8"))
## Rows: 4 Columns: 2
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): X1, X2
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
  head(data_from_csv_readr) 
## # A tibble: 4 × 2
##   X1           X2       
##   <chr>        <chr>    
## 1 Désignation  Langage  
## 2 écureils     français 
## 3 Eichhörnchen allemande
## 4 Squirrel     anglais

Diese hier ist jedoch gut. Aber das wird auf anderen Computer nicht gleich sien.

library(readr)
  data_from_csv_readr<-read_csv("éducation_façon_de_parler_Übungen.csv", locale(encoding="latin1"))
## Rows: 4 Columns: 2
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): X1, X2
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
  head(data_from_csv_readr) 
## # A tibble: 4 × 2
##   X1           X2       
##   <chr>        <chr>    
## 1 Désignation  Langage  
## 2 écureils     français 
## 3 Eichhörnchen allemande
## 4 Squirrel     anglais
Mit rio muss ich auch das Argument *encoding = “UTF-8” anfügen.

Machen wir es zuerst falsch:

library(rio)
  data_from_csv_rio<-import("éducation_façon_de_parler_Übungen.csv")
  head(data_from_csv_rio) # f&%k not right
##    Désignation   Langage
## 1     écureils  français
## 2 Eichhörnchen allemande
## 3     Squirrel   anglais

Und hier richtig:

data_from_csv_rio_encoding<-import("éducation_façon_de_parler_Übungen.csv",encoding = "UTF-8")
  head(data_from_csv_rio_encoding) 
##    Désignation   Langage
## 1     écureils  français
## 2 Eichhörnchen allemande
## 3     Squirrel   anglais