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?

60voto

krishan404 Punkte 579

Ich weiß, die Frage ist bereits beantwortet, aber auf diese Weise kann es für einige nützlicher sein:

Definieren Sie diese Funktion:

na.zero <- function (x) {
    x[is.na(x)] <- 0
    return(x)
}

Jetzt, wann immer Sie NA's in einem Vektor in Nullen umwandeln müssen, können Sie Folgendes tun:

na.zero(some.vector)

33voto

Charleslmh Punkte 401

Weiterer allgemeiner Ansatz zur Verwendung von replace() in einer Matrix oder einem Vektor, um NA durch 0 zu ersetzen.

Zum Beispiel:

> x <- c(1,2,NA,NA,1,1)
> x1 <- replace(x,is.na(x),0)
> x1
[1] 1 2 0 0 1 1

Dies ist auch eine Alternative zur Verwendung von ifelse() in dplyr

df = data.frame(col = c(1,2,NA,NA,1,1))
df <- df %>%
   mutate(col = replace(col,is.na(col),0))

33voto

Psidom Punkte 194986

Mit dplyr 0.5.0 können Sie die coalesce-Funktion verwenden, die leicht in die %>%-Pipeline integriert werden kann, indem Sie coalesce(vec, 0) durchführen. Dies ersetzt alle NAs in vec durch 0:

Sagen wir, wir haben ein Datenrahmen mit NAs:

Bibliothek(dplyr)
df <- Datenrahmen(v = c(1, 2, 3, NA, 5, 6, 8))

df
#    v
# 1  1
# 2  2
# 3  3
# 4 NA
# 5  5
# 6  6
# 7  8

df %>% mutieren(v = coalesce(v, 0))
#   v
# 1 1
# 2 2
# 3 3
# 4 0
# 5 5
# 6 6
# 7 8

29voto

Oliver Oliver Punkte 1917

Um alle NAs in einem Dataframe zu ersetzen, können Sie Folgendes verwenden:

df %>% ersetzen(is.na(.), 0)

14voto

reidjax Punkte 163

Ich hätte @ianmunoz's Post kommentiert, aber ich habe nicht genug Ruf. Du kannst dplyr's mutate_each und replace kombinieren, um die Ersetzung von NA durch 0 zu erledigen. Mit dem Datenrahmen aus @aL3xa's Antwort...

> m <- matrix(sample(c(NA, 1:10), 100, replace = TRUE), 10)
> d <- as.data.frame(m)
> d

    V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1   4  8  1  9  6  9 NA  8  9   8
2   8  3  6  8  2  1 NA NA  6   3
3   6  6  3 NA  2 NA NA  5  7   7
4  10  6  1  1  7  9  1 10  3  10
5  10  6  7 10 10  3  2  5  4   6
6   2  4  1  5  7 NA NA  8  4   4
7   7  2  3  1  4 10 NA  8  7   7
8   9  5  8 10  5  3  5  8  3   2
9   9  1  8  7  6  5 NA NA  6   7
10  6 10  8  7  1  1  2  2  5   7

> d %>% mutate_each( funs_( interp( ~replace(., is.na(.),0) ) ) )

    V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1   4  8  1  9  6  9  0  8  9   8
2   8  3  6  8  2  1  0  0  6   3
3   6  6  3  0  2  0  0  5  7   7
4  10  6

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