Ersetzen von NA durch Null in R
- Ersetzen von NA durch Null in größeren R-Datenframes
- Ersetzen von NA durch Null in einer Teilmenge des R-DataFrame
Es gibt eine einfache Möglichkeit, in R NA
in einem Datenframe durch Nullen zu ersetzen. Angenommen, Sie haben einen Datenframe namens my_data
. Um alle NA
-Werte durch Nullen in diesem Datenframe zu ersetzen, können Sie diese Anweisung ausführen.
my_data[is.na(my_data)] <- 0
Zum Beispiel, wenn my_data
den folgenden Inhalt hat.
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 NA 4 <NA> 7 10
5 1 2 ZC1 NA 2
Wenn Sie my_data[is.na(my_data)] <- 0
ausführen, ändert sich der Inhalt des DataFrame wie folgt.
C1 C2 C3 C4 C5
1 4 3 0 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 0 4 0 7 10
5 1 2 ZC1 0 2
Ersetzen von NA durch Null in größeren R-Datenframes
Die vorherige Lösung verwendet die Basis-R-Subset-Neuzuordnungen, die gut funktionieren, wenn Sie relativ kleine DataFrame haben. Aber für größere Datensätze benötigen Sie möglicherweise eine schnellere Alternative, wie den neuen hybriden Auswertungsansatz, der in neueren Versionen des Pakets dplyr
implementiert ist.
Der neue Ansatz des dplyr
-Pakets erkennt ganze Ausdrücke und verwendet C++-Code, um sie auszuwerten. Auf diese Weise können Sie bei der Verarbeitung großer DataFrame bis zu 30 % schnellere Transformationen erreichen.
Um mit dem dplyr
-Paket NA
-Werte durch Nullen zu ersetzen, können Sie die Funktion mutate
mit dem scoped verb _all
und die Funktion replace
im Format purrr
verwenden, wie im folgenden Beispiel.
my_data <- mutate_all(my_data, ~replace(., is.na(.), 0))
Die Verwendung der Notation purrr
ermöglicht es uns, die Funktion replace
auf jedes DataFrameelement anzuwenden.
Ersetzen von NA durch Null in einer Teilmenge des R-DataFrame
Anstelle des Verbs _all
in der Funktion mutate
können Sie das Verb _at
verwenden, um die Ersetzungsaktion auf bestimmte Spalten zu beschränken. Dazu können Sie einen Vektor mit den Namen der Spalten einschließen, auf die die Ersetzung angewendet werden soll. Wenn Sie unter Verwendung des vorherigen DataFrame nur die NA
-Werte in den Spalten C1
und C4
ersetzen müssen, können Sie den folgenden Befehl verwenden:
my_data <- mutate_at(my_data, c("C1", "C4"), ~replace(., is.na(.), 0))
Auf diese Weise werden nur die NA
-Werte in den Spalten C1
und C4
durch 0 ersetzt, was zu einem DataFrame wie unten führt.
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 0 4 <NA> 7 10
5 1 2 ZC1 0 2
Im vorherigen Beispiel hätten Sie vielleicht nur in numerischen Spalten NA
durch Nullen ersetzen wollen, um zu vermeiden, dass Nullwerte in alphanumerischen Spalten wie C3
enthalten sind. Wenn das der Fall ist, können Sie, anstatt die Spalten anzugeben, auf die Sie die Ersetzung anwenden wollen, die Funktion mutate_if
mit der Bedingung is.numeric
verwenden, um R zu sagen, dass NA
nur in numerischen Spalten durch Nullen ersetzt werden soll. Im folgenden Beispiel finden Sie den kompletten Code, um dies auszuprobieren, von der Installation des dplyr
-Pakets und dem Auffüllen des DataFrame bis zur Durchführung der Ersetzungen und der Anzeige der Ergebnisse.
install.packages("dplyr")
library(dplyr)
C1 <- c(4, 9, 1, NA, 1)
C2 <- c(3, 8, 1, 4, 2)
C3 <- c(NA, 'ABC', 'XYZ', NA, 'ZC1')
C4 <- c(3, 5, 3, 7, NA)
C5 <- c(7, 10, NA, 10, 2)
my_data <- data.frame(C1, C2, C3, C4, C5)
my_data <- mutate_if(my_data, is.numeric, ~replace(., is.na(.), 0))
my_data
Ausgabe:
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 0
4 0 4 <NA> 7 10
5 1 2 ZC1 0 2
Weitere Informationen über die Funktion mutate()
und ihre Varianten finden Sie in der R-Dokumentation.