pairs - Cambie las celdas en blanco a "NA"
poligono en r (6)
¿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
Aquí está el link de mis datos.
Mi objetivo 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 <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>
## 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 <NA> Physical Impairment (Eyes, Ear, Limb) A
2 7 20 No Control FALSE M 900 2 2 <NA> 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 <NA> Physical Impairment (Eyes, Ear, Limb) D
5 4 21 No Control FALSE 25 NA NA <NA> <NA> D
6 4 20 No Control NA F 30 2 4 <NA> Drinking Alcohol - Impaired 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
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)
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))
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)
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")
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 sintaxis 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