977 Stimmen

Wie kann ich NA-Werte in einem R-Datenrahmen durch Nullen ersetzen?

Ich habe ein Datenrahmen und einige Spalten haben NA-Werte.

Wie kann ich diese NA-Werte durch Nullen ersetzen?

16 Stimmen

Kleine Änderung von stackoverflow.com/questions/7279089/… (die ich durch die Suche nach "[r] Ersatz von NA durch Null" gefunden habe) ...

0 Stimmen

@psychonomics Was ist der Unterschied zwischen Ihrem Kommentar und der besten Antwort?

1 Stimmen

@svp - Vielleicht nichts? Ich kann meinen Kommentar nicht sehen. Ist es möglich, dass ich ihn gelöscht habe und du ihn immer noch sehen kannst?

13voto

Steffen Moritz Punkte 6007

Ein weiteres Beispiel mit dem imputeTS Paket:

library(imputeTS)
na.replace(deinDatenrahmen, 0)

12voto

jangorecki Punkte 15157

Gewidmete Funktionen, nafill und setnafill, für diesen Zweck befinden sich in data.table. Wo immer verfügbar, verteilen sie Spalten, die auf mehreren Threads berechnet werden sollen.

library(data.table)

ans_df <- nafill(df, fill=0)

# oder noch schneller, direkt
setnafill(df, fill=0)

12voto

user6075957 Punkte 111

Wenn Sie NAs in Faktorvariablen ersetzen möchten, könnte dies nützlich sein:

n <- length(levels(data.vector))+1

data.vector <- as.numeric(data.vector)
data.vector[is.na(data.vector)] <- n
data.vector <- as.factor(data.vector)
levels(data.vector) <- c("level1","level2",...,"leveln", "NAlevel") 

Es wandelt einen Faktor-Vektor in einen numerischen Vektor um und fügt einen weiteren künstlichen numerischen Faktorlevel hinzu, der dann wieder in einen Faktor-Vektor mit einem zusätzlichen "NA-Level" Ihrer Wahl umgewandelt wird.

10voto

Gautam Mokal Punkte 171

Es ist nicht notwendig, eine Bibliothek zu verwenden.

df <- data.frame(a=c(1,3,5,NA))

df$a[is.na(df$a)] <- 0

df

9voto

LMc Punkte 7979

dplyr >= 1.0.0

In neueren Versionen von dplyr:

across() ersetzt die Familie der "scoped variants" wie summarise_at(), summarise_if() und summarise_all().

df <- data.frame(a = c(LETTERS[1:3], NA), b = c(NA, 1:3))

library(tidyverse)

df %>% 
  mutate(across(where(anyNA), ~ replace_na(., 0)))

  a b
1 A 0
2 B 1
3 C 2
4 0 3

Dieser Code zwingt 0, in der ersten Spalte zu einem Zeichen zu werden. Um NA basierend auf dem Spaltentyp zu ersetzen, können Sie eine purrr-ähnliche Formel in where verwenden:

df %>% 
  mutate(across(where(~ anyNA(.) & is.character(.)), ~ replace_na(., "0")))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X