So ersetzen Sie fehlende Werte (NA) in R: na.omit & na.rm.

Inhaltsverzeichnis:

Anonim

Fehlende Werte in der Datenwissenschaft entstehen, wenn eine Beobachtung in einer Spalte eines Datenrahmens fehlt oder einen Zeichenwert anstelle eines numerischen Werts enthält. Fehlende Werte müssen gelöscht oder ersetzt werden, um aus den Daten korrekte Schlussfolgerungen zu ziehen.

In diesem Tutorial lernen wir, wie man mit fehlenden Werten in der dplyr-Bibliothek umgeht. Die dplyr-Bibliothek ist Teil eines Ökosystems zur Durchführung einer Datenanalyse.

In diesem Tutorial lernen Sie

  • mutieren()
  • Fehlende Werte ausschließen (NA)
  • Unterstellen Sie fehlende Werte (NA) mit dem Mittelwert und dem Median

mutieren()

Das vierte Verb in der dplyr-Bibliothek ist hilfreich, um eine neue Variable zu erstellen oder die Werte einer vorhandenen Variablen zu ändern.

Wir werden in zwei Teilen fortfahren. Wir werden lernen, wie man:

  • fehlende Werte aus einem Datenrahmen ausschließen
  • fehlende Werte mit Mittelwert und Median unterstellen

Das Verb mutate () ist sehr einfach zu bedienen. Wir können eine neue Variable erstellen, die dieser Syntax folgt:

mutate(df, name_variable_1 = condition,… )arguments:-df: Data frame used to create a new variable-name_variable_1: Name and the formula to create the new variable-… : No limit constraint. Possibility to create more than one variable inside mutate()

Fehlende Werte ausschließen (NA)

Die Methode na.omit () aus der dplyr-Bibliothek ist eine einfache Möglichkeit, fehlende Beobachtungen auszuschließen. Das Löschen der gesamten NA aus den Daten ist einfach, bedeutet jedoch nicht, dass dies die eleganteste Lösung ist. Während der Analyse ist es ratsam, verschiedene Methoden zu verwenden, um mit fehlenden Werten umzugehen

Um das Problem fehlender Beobachtungen anzugehen, verwenden wir den Titanic-Datensatz. In diesem Datensatz haben wir Zugriff auf die Informationen der Passagiere an Bord während der Tragödie. Dieser Datensatz enthält viele NA, für die gesorgt werden muss.

Wir werden die CSV-Datei aus dem Internet hochladen und dann prüfen, welche Spalten NA haben. Um die Spalten mit fehlenden Daten zurückzugeben, können wir den folgenden Code verwenden:

Laden wir die Daten hoch und überprüfen Sie die fehlenden Daten.

PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv"df_titanic <- read.csv(PATH, sep = ",")# Return the column names containing missing observationslist_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ]list_na

Ausgabe:

## [1] "age" "fare"

Hier,

colnames(df_titanic)[apply(df_titanic, 2, anyNA)]

Gibt den Namen von Spalten an, die keine Daten enthalten.

In den Spalten Alter und Tarif fehlen Werte.

Wir können sie mit na.omit () löschen.

library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)

Ausgabe:

## [1] 1045 13

Der neue Datensatz enthält 1045 Zeilen im Vergleich zu 1309 mit dem ursprünglichen Datensatz.

Fehlende Daten mit Mittelwert und Median unterstellen

Wir könnten auch fehlende Werte mit dem Median oder dem Mittelwert unterstellen (füllen). Es empfiehlt sich, zwei separate Variablen für den Mittelwert und den Median zu erstellen. Einmal erstellt, können wir die fehlenden Werte durch die neu gebildeten Variablen ersetzen.

Wir werden die Apply-Methode verwenden, um den Mittelwert der Spalte mit NA zu berechnen. Sehen wir uns ein Beispiel an

Schritt 1) ​​Zu Beginn des Tutorials haben wir den Spaltennamen mit den fehlenden Werten in der Liste list_na gespeichert. Wir werden diese Liste verwenden

Schritt 2) Nun müssen wir den Mittelwert mit dem Argument na.rm = TRUE berechnen. Dieses Argument ist obligatorisch, da in den Spalten Daten fehlen und R angewiesen wird, diese zu ignorieren.

# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing

Code Erläuterung:

Wir übergeben 4 Argumente in der Apply-Methode.

  • df: df_titanic [, Spaltennamen (df_titanic)% in% list_na]. Dieser Code gibt den Spaltennamen aus dem list_na-Objekt zurück (dh "Alter" und "Tarif").
  • 2: Berechnen Sie die Funktion für die Spalten
  • Mittelwert: Berechnen Sie den Mittelwert
  • na.rm = TRUE: Ignoriere die fehlenden Werte

Ausgabe:

## age fare## 29.88113 33.29548

Wir haben erfolgreich den Mittelwert der Spalten mit fehlenden Beobachtungen erstellt. Diese beiden Werte werden verwendet, um die fehlenden Beobachtungen zu ersetzen.

Schritt 3) Ersetzen Sie die NA-Werte

Das Verb mutate aus der dplyr-Bibliothek ist nützlich, um eine neue Variable zu erstellen. Wir möchten nicht unbedingt die ursprüngliche Spalte ändern, damit wir eine neue Variable ohne die NA erstellen können. mutate ist einfach zu verwenden, wir wählen einfach einen Variablennamen und definieren, wie diese Variable erstellt wird. Hier ist der vollständige Code

# Create a new variable with the mean and mediandf_titanic_replace <- df_titanic %>%mutate(replace_mean_age = ifelse(is.na(age), average_missing[1], age),replace_mean_fare = ifelse(is.na(fare), average_missing[2], fare))

Code Erläuterung:

Wir erstellen zwei Variablen, replace_mean_age und replace_mean_fare, wie folgt:

  • replace_mean_age = ifelse (is.na (Alter), durchschnittliches_missing [1], Alter)
  • replace_mean_fare = ifelse (is.na (Tarif), durchschnittliches_missing [2], Tarif)

Wenn in der Spalte Alter fehlende Werte vorhanden sind, ersetzen Sie diese durch das erste Element von mean_missing (Mittelwert des Alters), andernfalls behalten Sie die ursprünglichen Werte bei. Gleiche Logik für den Fahrpreis

sum(is.na(df_titanic_replace$age))

Ausgabe:

## [1] 263

Führen Sie den Austausch durch

sum(is.na(df_titanic_replace$replace_mean_age))

Ausgabe:

## [1] 0 

Das ursprüngliche Spaltenalter weist 263 fehlende Werte auf, während die neu erstellte Variable diese durch den Mittelwert des Variablenalters ersetzt hat.

Schritt 4) Wir können die fehlenden Beobachtungen auch durch den Median ersetzen.

median_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,median,na.rm = TRUE)df_titanic_replace <- df_titanic %>%mutate(replace_median_age = ifelse(is.na(age), median_missing[1], age),replace_median_fare = ifelse(is.na(fare), median_missing[2], fare))head(df_titanic_replace)

Ausgabe:

Schritt 5) Ein großer Datensatz kann viele fehlende Werte haben und die obige Methode kann umständlich sein. Wir können alle oben genannten Schritte in einer Codezeile mit der sapply () -Methode ausführen. Obwohl wir die Werte von Mittelwert und Median nicht kennen würden.

sapply erstellt keinen Datenrahmen, daher können wir die Funktion sapply () in data.frame () einschließen, um ein Datenrahmenobjekt zu erstellen.

# Quick code to replace missing values with the meandf_titanic_impute_mean < -data.frame(sapply(df_titanic,function(x) ifelse(is.na(x),mean(x, na.rm = TRUE),x)))

Zusammenfassung

Wir haben drei Methoden, um mit fehlenden Werten umzugehen:

  • Schließen Sie alle fehlenden Beobachtungen aus
  • Mit dem Mittelwert unterstellen
  • Mit dem Median unterstellen

In der folgenden Tabelle wird zusammengefasst, wie alle fehlenden Beobachtungen entfernt werden

Bibliothek Zielsetzung Code
Base Fehlende Beobachtungen auflisten
colnames(df)[apply(df, 2, anyNA)]
dplyr Entfernen Sie alle fehlenden Werte
na.omit(df)

Die Imputation mit Mittelwert oder Median kann auf zwei Arten erfolgen

  • Mit anwenden
  • Mit sapply
Methode Einzelheiten Vorteile Nachteile
Schritt für Schritt mit bewerben Überprüfen Sie die Spalten mit dem fehlenden Wert, berechnen Sie den Mittelwert / Median, speichern Sie den Wert und ersetzen Sie ihn durch mutate () Sie kennen den Wert von Mittelwert / Median Mehr Ausführungszeit. Kann bei großen Datenmengen langsam sein
Schneller Weg mit sapply Verwenden Sie sapply () und data.frame (), um fehlende Werte automatisch zu suchen und durch Mittelwert / Median zu ersetzen Funktionscode und schnell Ich kenne die Imputationswerte nicht