Lektion 2: Daten aufbereiten

Nach den Grundlagen von R in Lektion 1 geht es in dieser Lektion um das Arbeiten mit Daten. Zuerst schauen wir uns an, wie Daten in R eingelesen werden können. In einem zweiten Schritt lernen wir verschieden Techniken kennen, um die Daten für die Analyse aufzubereiten.

Daten einlesen

Damit wir Daten in R einlesen können, müssen wir R zuerst zeigen, wo wir diese Daten gespeichert haben. Das können wir mit der Funktion setwd()tun. Innerhalb der Funktion geben wir den Pfad als Character an. In Windows könnte der beispielsweise folgendermassen aussehen (Beachte die doppelten \. Das ist nötig, weil \ das Escape Zeichen in R ist.):

setwd("C:\\Users\\Max Muster\\Desktop\\Seminararbeit")

Auf einem Mac hat ein Pfad folgende Form:

setwd("~/Uni/Seminararbeit")

Den Pfad zu setzen hat den Nachteil, dass der Pfad angepasst werden muss, wenn der Code einer anderen Person geschickt wird. Eine Möglichkeit replizierbaren Code zu generieren ist mit einem R Project zu arbeiten, bei welchem der Pfad automatisch auf den Projektordner gesetzt wird. Alles was du zu R Projects wissen solltest erkläre ich dir im folgenden Video:

Nun sind wir bereit die Daten einzulesen. Im folgende Video erklärt ich dir, wie du dies in R tun kann. Unterhalb des Videos folgt eine kurze Auflistung der Funktionen für die wichtigsten Arten von Datensätzen.

df_name = readr::read_csv("datensatz.csv") # csv
df_name = readr::read_csv2("datensatz.csv") # Excel csv
df_name = readxl::read_excel("datensatz.xlsx") # Excel
df_name = haven::read_dta("datensatz.dta") # Stata
df_name = haven::read_sav("datensatz.sav") # SPSS
df_name = readRDS("datensatz.Rds") # R Datenformat

Daten aufbereiten

Nachdem einlesen der Daten sind sie häufig noch nicht im Format, in dem wir sie brauchen. Im folgenden Video erkläre ich dir Schritt für Schritt, wie du die Daten bearbeiten kannst. Unter dem Video fasse ich die wichtigsten Punkte zusammen.

Die Daten können mit der Package Kollektion tidyverse bearbeitet werden.

library(tidyverse)

Um Daten auszuwählen, können wir die Funktion select() verwenden.

df_name = select(df_name, var1, var2, var_from:var_to)

Brauchen wir nur einen Teil der Daten (wie beispielsweise nur ein Land oder eine Jahr) können wir die Daten mit der Funktion filter() filtern.

df_name = filter(df_name, year >= 2010)

Die Liste der Operatoren für die Kondition sind: == (gleich), != (nicht gleich), > (grösser), >= (grösser gleich), < (kleiner), <= (kleiner gleich), %in% (in einem Vektor vorhanden). Die Konditionen können verknüpft werden mit & (und), | (oder), xor() (entweder oder).

Wollen wir Daten ändern, können wir das mit der Funktion mutate() tun. Innerhalb dieser Funktion können wir recode() verwenden, um Werte zu ändern.

df_name = mutate(df_name,
  var1 = recode(var1, "negativ" = -1, "neutral" = 0, 
                "positiv" = 1, "keine Antwort" = NA)
)

Mit dem Pipe-Operator %>% können Funktionen verknüpft werden. Der Ergebnis links des Operators wird als erstes Argument der Funktion rechts des Operators verwendet.

df_name = df_name %>% 
select(var1, var3) %>%
filter(country = "CH") %>% 
mutate(
  var3 = recode(var3, "no answer" = NA, 
                .default = as.numeric(var3))
)

Um alle Fälle mit fehlenden Werten (NA) zu entfernen, kann die Funktion na.omit()verwendet werden.

df_name = na.omit(df_name)

Um Daten zu aggregieren, müssen sie zuerst mit der Funktion group_by() gruppiert werden. Anschliessend kann die Funktion summerise()für die Aggregation verwendet werden.

df_name = df_name %>% group_by(jahr, land) %>%
summerise(max_var1 = max(var1, na.rm = TRUE))

Wenn wir Daten im langen Format haben, sie aber im breiten Format brauchen, können wir dafür die Funktion pivot_wider()verwenden. In die umgekehrte Richtung hilft uns die Funktion pivot_longer() weiter.

df_wide = df_long %>% 
pivot_wider(names_from = "var1", values_from = "var2")
df_long = df_wide %>%
pivot_longer(var5:var15, names_to = "var1", 
             values_to = "var2")

Wollen wir zwei Datensätze über eine gemeinsame Variable zu einem Datensatz zusammenfügen, können wir dafür die Funktionen inner_join(), left_join(), right_join() oder full_join() nutzen. Die erste Funktion behält nur die Fälle, welche in beiden Datensätzen vorkommen, die letzte Funktion behält alle Fälle während die zweite und dritte Funktion nur alle Fälle eines Datensatzes behält.

df_merged = df_umfrage %>% 
left_join(df_regionen, by = c("region" = "rID"))

Manchmal haben wir Datensätze aus unterschiedlichen Jahren oder Ländern mit den gleichlautenden Variablen und wollen sie zu einem Datensatz zusammenfügen. Dies können wir mit der Funktion bind_rows() tun.

df_umfrage = df_umfrage2011 %>% 
binds_rows(df_umfrage2015) %>%
bind_rows(df_umfrage2019)

Das gleiche geht anstelle von Zeilen auch mit Kolonnen. Dafür verwenden wir die Funktion bind_cols().