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

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 ziehen zu können.

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

In diesem Tutorial lernst du

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

mutieren()

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

Wir werden in zwei Teilen vorgehen. 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 verwenden. Wir können eine neue Variable folgenwing diese Syntax:

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 Entfernen aller NA aus den Daten ist einfach, bedeutet aber nicht, dass es die eleganteste Lösung ist. Bei der Analyse ist es so wise verschiedene Methoden zum Umgang mit fehlenden Werten einzusetzen

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

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 Folgendes verwendenwing Code:

Lassen Sie uns die Daten hochladen und die fehlenden Daten überprüfen.

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

Ausgang:

## [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)

Ausgang:

## [1] 1045 13

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

Imputieren Sie fehlende Daten mit dem Mittelwert und dem Median

Wir könnten fehlende Werte auch mit dem Median oder dem Mittelwert unterstellen (auffüllen). Eine gute Vorgehensweise besteht darin, zwei separate Variablen für den Mittelwert und den Median zu erstellen. Nach der Erstellung 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) Jetzt müssen wir den Mittelwert mit dem Argument na.rm = TRUE berechnen. Dieses Argument ist obligatorisch, da in den Spalten Daten fehlen, und dies weist R an, diese zu ignorieren.

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

Code-Erklärung:

Wir übergeben 4 Argumente in der apply-Methode.

  • df: df_titanic[,colnames(df_titanic) %in% list_na]. Dieser Code gibt den Spaltennamen aus dem list_na-Objekt zurück (z. B. „Alter“ und „Fahrpreis“).
  • 2: Berechnen Sie die Funktion für die Spalten
  • Mittelwert: Berechnen Sie den Mittelwert
  • na.rm = TRUE: Fehlende Werte ignorieren

Ausgang:

## age fare ## 29.88113 33.29548

Wir haben erfolgreich den Mittelwert der Spalten erstellt, die fehlende Beobachtungen enthalten. 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 beim Erstellen einer neuen Variablen. Wir möchten nicht unbedingt die ursprüngliche Spalte ändern, damit wir eine neue Variable ohne 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-Erklärung:

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

  • replace_mean_age = ifelse(is.na(age), Average_missing[1], age)
  • replace_mean_fare = ifelse(is.na(fare), Average_missing[2],fare)

Wenn in der Spalte „Alter“ Werte fehlen, ersetzen Sie diese durch das erste Element von „average_missing“ (Mittelwert des Alters). Andernfalls behalten Sie die ursprünglichen Werte bei. Dieselbe Logik für den Fahrpreis

sum(is.na(df_titanic_replace$age))

Ausgang:

## [1] 263

Führen Sie den Austausch durch

sum(is.na(df_titanic_replace$replace_mean_age))

Ausgang:

## [1] 0

In der ursprünglichen Spalte „Alter“ fehlen 263 Werte, während die neu erstellte Variable diese durch den Mittelwert der Variablen „Alter“ 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)

Ausgang:

Schritt 5) Bei einem großen Datensatz könnten viele Werte fehlen und die obige Methode könnte umständlich sein. Mit der Methode sapply() können wir alle oben genannten Schritte in einer Codezeile ausführen. Allerdings kennen wir die Werte von Mittelwert und Median nicht.

sapply erstellt kein Datenrahmen, sodass wir die Funktion sapply() in data.frame() einschließen können, 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 imputieren
  • Mit dem Median imputieren

Die folgendenwing TischsummemariZeigt, wie alle fehlenden Beobachtungen entfernt werden

BibliothekZielCode
BaseListen Sie fehlende Beobachtungen auf
colnames(df)[apply(df, 2, anyNA)]
dplyrEntfernen Sie alle fehlenden Werte
na.omit(df)

Die Imputation mit Mittelwert oder Median kann auf zwei Arten erfolgen

  • Mit apply
  • Verwendung von Sapply
VersandartDetailsVorteileNachteile
Schritt für Schritt mit bewerbenÜberprüfen Sie die fehlenden Spalten, berechnen Sie den Mittelwert/Median, speichern Sie den Wert und ersetzen Sie ihn durch mutate()Sie kennen den Wert von Mittelwert/MedianMehr Ausführungszeit. Kann bei großen Datensätzen langsam sein
Schneller Weg mit SapplyVerwenden Sie sapply() und data.frame(), um fehlende Werte automatisch zu suchen und durch Mittelwert/Median zu ersetzenKurzer Code und schnellKenne die Imputationswerte nicht

Du magst vielleicht:

  • Was ist die Programmiersprache R? Einführung und Grundlagen von R
  • So laden Sie RStudio in Anaconda herunter und installieren es [Windows/Mac]
  • Funktionen in der R-Programmierung mit Beispiel
  • IF, ELSE, ELSE IF-Anweisung in R
  • For-Schleife in R mit Beispielen für Liste und Matrix
  • boxplot() in R: Wie man es macht BoxDiagramme in RStudio [Beispiele]
  • Balkendiagramm und Histogramm in R (mit Beispiel)
  • T-Test in der R-Programmierung: Ein Beispiel und gepaarter T-Test [Beispiel]
So ersetzen Sie fehlende Werte (NA) in R: na.omit & na.rm (2024)
Top Articles
Latest Posts
Article information

Author: Terence Hammes MD

Last Updated:

Views: 5482

Rating: 4.9 / 5 (49 voted)

Reviews: 88% of readers found this page helpful

Author information

Name: Terence Hammes MD

Birthday: 1992-04-11

Address: Suite 408 9446 Mercy Mews, West Roxie, CT 04904

Phone: +50312511349175

Job: Product Consulting Liaison

Hobby: Jogging, Motor sports, Nordic skating, Jigsaw puzzles, Bird watching, Nordic skating, Sculpting

Introduction: My name is Terence Hammes MD, I am a inexpensive, energetic, jolly, faithful, cheerful, proud, rich person who loves writing and wants to share my knowledge and understanding with you.