valores - ¿Cómo reemplazar el valor NaN con cero en un marco de datos enorme?
replace na with 0 in r (3)
Intenté reemplazar los valores de NaN
con ceros usando el siguiente script:
rapply( data123, f=function(x) ifelse(is.nan(x),0,x), how="replace" )
# [31] 0.00000000 -0.67994832 0.50287454 0.63979527 1.48410571 -2.90402836
El valor de NaN se mostró cero, pero cuando escribí el nombre del marco de datos y traté de revisarlo, el valor seguía siendo NaN.
data123$contri_us
# [31] NaN -0.67994832 0.50287454 0.63979527 1.48410571 -2.90402836
No estoy seguro de si el comando rapply
realidad estaba aplicando el ajuste en el marco de datos, o simplemente reemplazó el valor como se muestra.
¿Alguna idea de cómo cambiar el valor de NaN
a cero?
De hecho, en R, esta operación es muy fácil:
Si la matriz ''a'' contiene algo de NaN, solo necesita usar el siguiente código para reemplazarlo por 0:
a <- matrix(c(1, NaN, 2, NaN), ncol=2, nrow=2)
a[is.nan(a)] <- 0
a
Si el marco de datos ''b'' contiene algo de NaN, solo necesita usar el siguiente código para reemplazarlo por 0:
#for a data.frame:
b <- data.frame(c1=c(1, NaN, 2), c2=c(NaN, 2, 7))
b[is.na(b)] <- 0
b
Note que la diferencia is.nan
cuando es una matriz vs. is.na
cuando es un marco de datos.
Obra
#...
b[is.nan(b)] <- 0
#...
rendimientos: Error in is.nan(b) : default method not implemented for type ''list''
porque b es un marco de datos.
Nota: Editado para errores tipográficos pequeños pero confusos.
Lo siguiente debe hacer lo que quieras:
x <- data.frame(X1=sample(c(1:3,NaN), 200, replace=TRUE), X2=sample(c(4:6,NaN), 200, replace=TRUE))
head(x)
x <- replace(x, is.na(x), 0)
head(x)
Parece que is.nan
realmente no tiene un método para marcos de datos, a diferencia de is.na
Entonces, vamos a arreglar eso!
is.nan.data.frame <- function(x)
do.call(cbind, lapply(x, is.nan))
data123[is.nan(data123)] <- 0