una - reemplazar valores perdidos en r
Reemplazar todos los valores particulares en un marco de datos (4)
Como PikkuKatja y Glallen pidieron una solución más general y todavía no puedo hacer ningún comentario, escribiré una respuesta. Puede combinar declaraciones como en:
> df[df=="" | df==12] <- NA
> df
A B
1 <NA> <NA>
2 xyz <NA>
3 jkl 100
Para los factores, el código de zxzak ya produce factores:
> df <- data.frame(list(A=c("","xyz","jkl"), B=c(12,"",100)))
> str(df)
''data.frame'': 3 obs. of 2 variables:
$ A: Factor w/ 3 levels "","jkl","xyz": 1 3 2
$ B: Factor w/ 3 levels "","100","12": 3 1 2
Si tiene problemas, le sugiero que deje caer temporalmente los factores.
df[] <- lapply(df, as.character)
Al tener un marco de datos, ¿cómo hago para reemplazar todos los valores particulares a lo largo de todas las filas y columnas? Digamos, por ejemplo, que quiero reemplazar todos los registros vacíos por los de NA
(sin escribir las posiciones):
df <- data.frame(list(A=c("", "xyz", "jkl"), B=c(12, "", 100)))
A B
1 12
2 xyz
3 jkl 100
Resultado Esperado:
A B
1 NA 12
2 xyz NA
3 jkl 100
Me gusta esto:
> df[df==""]<-NA
> df
A B
1 <NA> 12
2 xyz <NA>
3 jkl 100
Podemos usar data.table para obtenerlo rápidamente. Primero crea df sin factores,
df <- data.frame(list(A=c("","xyz","jkl"), B=c(12,"",100)), stringsAsFactors=F)
Ahora puedes usar
setDT(df)
for (jj in 1:ncol(df)) set(df, i = which(df[[jj]]==""), j = jj, v = NA)
y puedes convertirlo de nuevo a un data.frame
setDF(df)
Si solo quiere usar data.frame y mantener los factores es más difícil, debe trabajar con
levels(df$value)[levels(df$value)==""] <- NA
donde value es el nombre de cada columna. Debe insertarlo en un bucle.
Si desea reemplazar varios valores en un marco de datos, puede ser útil recorrer todas las columnas.
Digamos que quiere reemplazar ""
y 100
:
na_codes <- c(100, "")
for (i in seq_along(df)) {
df[[i]][df[[i]] %in% na_codes] <- NA
}