NA in R
|

NA in R – Umgang mit fehlenden Werten

Fehlende Werte sind in Datensätzen ein häufig auftretendes Problem, das besondere Herausforderungen an die Datenanalyse stellt. In R werden fehlende Werte als NA, also „not available“ bezeichnet. In diesem Blogpost wollen wir uns nochmals ansehen, wie man mit NA in R umgeht und dabei einige Fragen beantworten, die im früheren Beitrag noch nicht beantwortet wurden.

NA in R

In R werden fehlende Werte durch den speziellen Wert NA dargestellt. Fehlende Werte können in vielen Situationen auftreten, z. B. wenn Daten nicht erhoben, gemessen oder aufgezeichnet wurden.

# Einfaches Beispiel
x <- c(1, 2, NA, 4)

NAs in einem Datensatz erkennen und darstellen

Um die Anzahl der fehlenden Werte in einem Datensatz zu ermitteln, kann man die Funktion is.na() verwenden, die einen logischen Vektor der gleichen Länge wie der Eingabevektor zurückgibt. Um die Anzahl der NAs in jedem Feld eines Data Frames (oder Data Tables) zu zählen, kann man die Funktion apply() verwenden:

# Beispiel-Datensatz
data <- data.frame(
  id=1:5,
  age=c(25, 33, NA, 29, 41),
  gender=c("M", "F", "F", NA, "M")
)

# Anzahl der NAs pro Spalte ermitteln
apply(data, 2, function(x) sum(is.na(x)))

Fehlende Werte in Tabellen entfernen

Manchmal ist es notwendig, fehlende Werte in Dataframes vollständig zu entfernen (= die Fälle entfernen, die mind. einen fehlenden Wert beinhalten). Hierfür kann man die Funktion na.omit() verwenden:

data_no_na <- na.omit(data)

Umgang mit speziellen Werten in Daten

Manchmal werden in Datensätzen spezielle Werte wie 88 für „weiß nicht“ oder 99 für „Antwort verweigert“ verwendet. Um diese Werte in NAs umzuwandeln, kann man die Funktion replace() verwenden:

data$education <- replace(data$education, data$education %in% c(88, 99), NA)

Subsets erstellen, ohne ganze Zeilen zu verlieren

Um Subsets zu erstellen, ohne dabei ganze Zeilen mit NAs zu entfernen, kann man die Funktion subset() verwenden:

subset_data <- subset(data, !is.na(condition))

NA und Warnungen bei statistischen Funktionen

Wenn man versucht, deskriptive Statistiken wie den Durchschnitt für Spalten mit NAs zu berechnen, erhält man möglicherweise ein NA als Resultat. Um dies zu vermeiden und den Durchschnitt korrekt zu berechnen, sollte man das Argument na.rm = TRUE verwenden:

mean(data$age, na.rm=TRUE)

Falscher Datentyp für statistische Funktionen

Auch kann es sein, dass man folgende Fehlermeldung erhält: „argument is not numeric or logical: returning NA“ bzw. „Argument ist weder numerisch noch boolesch: gebe NA zurück“. In diesem Fall kann es gut sein, dass der Vektor vom Typ character ist und vorher noch in numeric (oder integer) umgewandelt werden muss.

vec <- as.numeric(vec)
mean(vec, na.rm=TRUE)

Interpolation von NA in R

In einigen Fällen kann es sinnvoll sein, fehlende Werte durch interpolierte Werte zu ersetzen. Hierfür kann man die Funktion na.approx() aus dem Package zoo verwenden:

# Beispiel: Interpolation von fehlenden Werten
library(zoo)
x <- c(1, 2, NA, 4)
x_interpolated <- na.approx(x)

NA in Zeitreihen: Fortschreiben des letzten Werts

Neben der Interpolation können wir auch den letzten validen Wert fortschreiben. Dazu verwenden wir die Funktion na.locf() („last observation carried forward“), auch aus dem Package zoo:

# Beispiel: Fehlende Werte in einer Zeitreihe ersetzen
library(zoo)
ts_data <- c(1, 2, NA, 4)
ts_data_no_na <- na.locf(ts_data)

Fazit

Insgesamt gibt es viele Möglichkeiten, um in R mit fehlenden Werten umzugehen. Die Wahl der richtigen Methode hängt von der Art der Daten und dem spezifischen Anwendungsfall ab. Im Folgenden sind einige wichtige Punkte zusammengefasst:

  1. Die Funktion is.na() identifiziert fehlende Werte in Vektoren oder Data Frames.
  2. Statistische Funktionen wie sum() und mean() bieten den optionalen Parameter na.rm, um fehlende Werte bei der Berechnung zu ignorieren.
  3. Fehlende Werte können durch andere Werte, wie z.B. 0, ersetzt werden, indem man die Funktionen ifelse() oder replace() verwendet.
  4. Die Funktion na.omit() kann verwendet werden, um Zeilen mit fehlenden Werten aus einem Data Frame zu entfernen.
  5. Für den Umgang mit fehlenden Werten in Zeitreihen gibt es spezielle Funktionen wie na.locf() oder na.approx() aus dem Paket zoo.

Hast du noch mehr Fragen zu NA in R oder ein bestimmtes Problem in einem anderen Bereich? Schreib mir einfach eine Mail: mail@r-coding.de.
Bleib außerdem auf dem Laufenden mit dem r-coding Newsletter. Du erhältst Infos zu neuen Blogeinträgen, sowie kleine Tipps und Tricks zu R. Melde dich jetzt an: http://r-coding.de/newsletter.

Viel Erfolg!

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.