Finden und ersetzen Sie fehlende Werte mit der Zeile bedeuten
Habe ich einen Daten-frame mit NAs und ich möchte Sie ersetzen die NAs mit der Zeile bedeutet
c1 = c(1,2,3,NA)
c2 = c(3,1,NA,3)
c3 = c(2,1,3,1)
df = data.frame(c1,c2,c3)
> df
c1 c2 c3
1 1 3 2
2 2 1 1
3 3 NA 3
4 NA 3 1
so, dass
> df
c1 c2 c3
1 1 3 2
2 2 1 1
3 3 3 3
4 2 3 1
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehr ähnlich zu @baptiste Antwort
arr.ind
argumentDenke ich, dass dies funktioniert,
apply
!idx <- which(is.na(df), arr.ind=TRUE); df[ idx ] <- rowMeans( df[ idx[,1] , ], na.rm=TRUE)
complete.cases
Teil könnte nützlich sein, in einer anderen situationMit
apply
(beachten Sie das zurückgegebene Objekt ist einmatrix
):Nutzen wir jede anonyme Funktion zum ändern der Werte von einzelnen
NA
in jeder Zeile diemean
der Zeile. Der einzige Vorteil ist, dass man gar nicht mehr eingeben, wenn die Anzahl der Zeilen erhöht. Es ist nicht besonders effizient oder schnell in einen rechnerischen Sinne, sondern mehr so in einem kognitiven Sinne (Sie werden nicht merken, es sei denn, Sie haben 000,000 von Zeilen).Meine Lösung ist
Gibt es eine elegantere Art und Weise, vor allem, wenn jemand viele Spalten hat?
[[
index statt, so dass jede Zeile wirddf[[col_name]][is.na(df[[col_name]])] <- rwmns[is.na(df[[col_name]])
. So können Sie mit einer Schleife, oder verwenden Sie eine Familie gelten, über die Spaltennamen, die Sie durchführen wollen, Ersatz auf.Weitere option ist
na.aggregate
auslibrary(zoo)
nach der Umsetzung des dataset