name multiple funcion data conditions column r csv dataframe subset na

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), ]