Oftmals bekommen wir Datensätze, in denen für einzelne Werte NA gespeichert ist. Dies beschreibt fehlende Werte, und in Abhängigkeit vom Datensatz und den zu bearbeitenden Forschungsfragen wollen wir möglicherweise Zeilen, welche den Wert NA haben, herauswerfen. Hier sind zwei Möglichkeiten beschrieben, wie dies machbar ist. Dazu nehmen wir uns den Datensatz aus den Beispielen von Woche 4, nun allerdings mit ein paar NA Werten:
Id Name Geschlecht Alter Groesse_m Gewicht_kg
1 1 Anna Weiblich 25 1.75 60
2 2 Stephan <NA> 22 1.60 70
3 3 Ina Weiblich 19 NA 65
4 4 Matthias Männlich 29 1.95 80
5 5 Katrin Weiblich 17 1.67 NA
Filtern mittels na.omit()
Mit na.omit() werden alle Zeilen herausgeworfen, in denen irgendwo ein NA-Wert ist:
df_clean <-na.omit(df)df_clean
Id Name Geschlecht Alter Groesse_m Gewicht_kg
1 1 Anna Weiblich 25 1.75 60
4 4 Matthias Männlich 29 1.95 80
Filtern mittels complete.cases()
Ein bisschen flexibler ist die Nutzung von complete.cases(). Zum beispiel hätten wir ja die Zeile Id=2 gerne behalten, da hier lediglich die Information zum Geschlecht fehlt, alles andere jedoch vorhanden ist. Mit der Funktion complete.cases() können wir Zeilenindizes erfragen, in welchen in bestimmten Spalten NA-Werte auftreten. Diese werden mit FALSE beschrieben (da sie ja nicht complete sind)
cases <-complete.cases(df[4:6])cases
[1] TRUE TRUE FALSE TRUE FALSE
mittels Indizierung können wir nun die entsprechenden Zeilen herauswerfen:
df_clean <- df[cases,]df_clean
Id Name Geschlecht Alter Groesse_m Gewicht_kg
1 1 Anna Weiblich 25 1.75 60
2 2 Stephan <NA> 22 1.60 70
4 4 Matthias Männlich 29 1.95 80
Filtern in tidyverse
Natürlich können wir die ganze Sache auch im tidyverse machen. Hier gibt es wieder die zwei Möglichkeiten: (1) alle NA Werte unabhängig von den Spalten, (2) NA Werte innerhalb bestimmter Spalten. IN beiden Fällen ist die betreffende Funtion drop_na()
df_clean <- df %>%drop_na()df_clean
Id Name Geschlecht Alter Groesse_m Gewicht_kg
1 1 Anna Weiblich 25 1.75 60
2 4 Matthias Männlich 29 1.95 80