Cambie las celdas en blanco a “NA”

Aquí está el enlace de mis datos.

Mi objective es asignar “NA” a todas las celdas en blanco, independientemente de los valores categóricos o numéricos. Estoy usando na.strings = “” . Pero no asigna NA a todas las celdas en blanco.

## reading the data dat <- read.csv("data2.csv") head(dat) mon hr acc alc sex spd axles door reg cond1 drug1 1 8 21 No Control TRUE F 0 2 2 Physical Impairment (Eyes, Ear, Limb) A 2 7 20 No Control FALSE M 900 2 2 Inattentive D 3 3 9 No Control FALSE F 100 2 2 2004 Normal D 4 1 15 No Control FALSE M 0 2 2 Physical Impairment (Eyes, Ear, Limb) D 5 4 21 No Control FALSE 25 NA NA D 6 4 20 No Control NA F 30 2 4 Drinking Alcohol - Impaired D inj1 PED_STATE st rac1 1 Fatal  F  2 Moderate  F  3 Moderate  M  4 Complaint  M  5 Complaint  F  6 Moderate  M  ## using na.strings dat2 <- read.csv("data2.csv", header=T, na.strings="") head(dat2) mon hr acc alc sex spd axles door reg cond1 drug1 1 8 21 No Control TRUE F 0 2 2  Physical Impairment (Eyes, Ear, Limb) A 2 7 20 No Control FALSE M 900 2 2  Inattentive D 3 3 9 No Control FALSE F 100 2 2 2004 Normal D 4 1 15 No Control FALSE M 0 2 2  Physical Impairment (Eyes, Ear, Limb) D 5 4 21 No Control FALSE 25 NA NA   D 6 4 20 No Control NA F 30 2 4  Drinking Alcohol - Impaird D inj1 PED_STATE st rac1 1 Fatal NA F NA 2 Moderate NA F NA 3 Moderate NA M NA 4 Complaint NA M NA 5 Complaint NA F NA 6 Moderate NA M NA 

Supongo que estás hablando de la fila 5 columna “sexo”. Podría ser el caso que en el archivo data2.csv, la celda contenga un espacio y, por lo tanto, R. no lo considere vacío.

Además, noté que en la fila 5 columnas “ejes” y “puerta”, los valores originales leídos de data2.csv son “NA”. Probablemente también quieras tratarlos como na.strings. Para hacer esto,

 dat2 <- read.csv("data2.csv", header=T, na.strings=c("","NA")) 

EDITAR:

Descargué su data2.csv. Sí, hay un espacio en la fila 5 columna "sexo". Entonces quieres

 na.strings=c(""," ","NA") 

Puede usar gsub para reemplazar múltiples mutaciones de vacío, como “” o un espacio, para que sea NA:

 data= data.frame(cats=c('', ' ', 'meow'), dogs=c("woof", " ", NA)) apply(data, 2, function(x) gsub("^$|^ $", NA, x)) 

Una solución más amigable con el uso de dplyr sería

 require(dplyr) ## fake some NA iris[1,1]="" ## define a helper function empty_as_na <- function(x){ if("factor" %in% class(x)) x <- as.character(x) ## since ifelse wont work with factors ifelse(as.character(x)!="", x, NA) } ## transform all columns iris %>% mutate_each(funs(empty_as_na)) 

Para aplicar la corrección a solo un subconjunto de columnas, puede especificar columnas de interés utilizando la syntax de coincidencia de columnas de dplyr. Ejemplo: mutate_each(funs(empty_as_na), matches("Width"), Species)

En caso de que la tabla contenga fechas, debería considerar usar una versión más segura de ifelse

Recientemente me encontré con problemas similares. Esto es lo que funcionó para mí, si la variable es numérica, entonces un simple df$Var[df$Var == ""] <- "NA" debería ser suficiente. Pero si la variable es un factor, primero debe convertirlo en carácter, luego reemplazar "" celdas con el valor que desee y convertirlo nuevamente en factor. Así que, por ejemplo, su variable Sex, supongo que sería un factor y si quiere reemplazar la celda vacía, haría lo siguiente:

 df$Var <- as.character(df$Var) df$Var[df$Var==""] <- "NA" df$Var <- as.factor(df$Var) 

¿No podrías simplemente usar

 dat <- read.csv("data2.csv",na.strings=" ",header=TRUE) 

debe convertir todos los espacios en blanco a NA a medida que se leen los datos, asegúrese de poner un espacio entre su cita

Llame dplyr paquete dplyr instalándolo desde el cran en r

 library(dplyr) (file)$(colname)<-sub("-",NA,file$colname) 

Convertirá todas las celdas en blanco en una columna particular como NA

Si la columna contiene "-", "", 0 como esta, cámbiela en el código de acuerdo con el tipo de celda en blanco

Por ejemplo, si obtengo una celda en blanco como "" en lugar de "-", entonces use este código:

 (file)$(colname)<-sub("", NA, file$colname)