with valores valor una sustituir studio reemplazar por perdidos otro como columna cambiar r replace

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