with valores valor una reemplazar por perdidos otro omitir faltantes eliminar datos data como columna cambiar r dataframe replace

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 }