multiple - subset data frame r
Subconjunto de filas que contienen valores NA(faltantes) en una columna elegida de un marco de datos (5)
Tenemos un marco de datos de un archivo CSV. El marco de datos DF
tiene columnas que contienen valores observados y una columna ( VaR2
) que contiene la fecha en la que se tomó una medición. Si la fecha no se registró, el archivo CSV contiene el valor NA
, para datos faltantes.
Var1 Var2
10 2010/01/01
20 NA
30 2010/03/01
Nos gustaría utilizar el comando subconjunto para definir un nuevo marco de datos new_DF
manera que solo contenga filas que tengan un valor NA''
de la columna ( VaR2
). En el ejemplo dado, solo la Fila 2 estará contenida en el nuevo DF
.
El comando
new_DF<-subset(DF,DF$Var2=="NA")
no funciona, el marco de datos resultante no tiene entradas de fila.
Si en el archivo CSV original, el valor NA
se intercambia con NULL
, el mismo comando produce el resultado deseado: new_DF<-subset(DF,DF$Var2=="NULL")
.
¿Cómo puedo hacer que este método funcione, si para la cadena de caracteres se proporciona el valor NA
en el archivo CSV original?
Imprime todas las filas con datos de NA:
tmp <- data.frame(c(1,2,3),c(4,NA,5));
tmp[round(which(is.na(tmp))/ncol(tmp)),]
Intenta cambiar esto:
new_DF<-dplyr::filter(DF,is.na(Var2))
NA es un valor especial en R, no mezcle el valor NA con la cadena "NA". Dependiendo de la forma en que se importaron los datos, sus celdas "NA" y "NULL" pueden ser de varios tipos (el comportamiento predeterminado es convertir cadenas "NA" a valores NA, y dejar cadenas "NULAS" como están).
Si utiliza read.table () o read.csv (), debe considerar el argumento "na.strings" para hacer la importación de datos limpios, y siempre trabajar con valores R NA reales.
Un ejemplo, trabajando en ambas celdas "NULL" y "NA":
DF <- read.csv("file.csv", na.strings=c("NA", "NULL"))
new_DF <- subset(DF, is.na(DF$Var2))
Nunca use == ''NA'' para probar los valores perdidos. Use is.na()
lugar. Esto debería hacerlo:
new_DF <- DF[rowSums(is.na(DF)) > 0,]
o en caso de que quiera verificar una columna en particular, también puede usar
new_DF <- DF[is.na(DF$Var),]
En caso de que tengas valores de caracteres NA, primero ejecuta
Df[Df==''NA''] <- NA
para reemplazarlos con valores perdidos.
complete.cases
da TRUE
cuando todos los valores en una fila no son NA
DF[!complete.cases(DF), ]