r dataframe subset na

¿Cómo subconjunto de datos en R sin perder filas de NA?



dataframe subset (2)

Si decidimos usar la función de subset , entonces debemos tener cuidado:

For ordinary vectors, the result is simply ‘x[subset & !is.na(subset)]’.

Por lo tanto, solo se retendrán los valores que no sean NA.

Si desea conservar los casos de NA , use lógica o condición para decirle a R que no descarte los casos de NA :

subset(df1, Height < 40 | is.na(Height)) # or `df1[df1$Height < 40 | is.na(df1$Height), ]`

No use directamente (se explicará pronto):

df2 <- df1[df1$Height < 40, ]

Ejemplo

df1 <- data.frame(Height = c(NA, 2, 4, NA, 50, 60), y = 1:6) subset(df1, Height < 40 | is.na(Height)) # Height y #1 NA 1 #2 2 2 #3 4 3 #4 NA 4 df1[df1$Height < 40, ] # Height y #1 NA NA #2 2 2 #3 4 3 #4 NA NA

La razón por la que este último falla es que la indexación por NA da NA . Considere este ejemplo simple con un vector:

x <- 1:4 ind <- c(NA, TRUE, NA, FALSE) x[ind] # [1] NA 2 NA

Necesitamos reemplazar de alguna manera esos NA con TRUE . La forma más directa es agregar otra condición "o" is.na(ind) :

x[ind | is.na(ind)] # [1] 1 2 3

Esto es exactamente lo que sucederá en su situación. Si su Height contiene NA , entonces la operación lógica Height < 40 termina en una mezcla de TRUE / FALSE / NA , por lo que necesitamos reemplazar NA por TRUE como se TRUE anteriormente.

Tengo algunos datos que estoy viendo en R. Una columna en particular, titulada "Altura", contiene algunas filas de NA.

Estoy buscando subconjuntar mi marco de datos para que todas las Alturas por encima de un cierto valor se excluyan de mi análisis.

df2 <- subset ( df1 , Height < 40 )

Sin embargo, cada vez que hago esto, R elimina automáticamente todas las filas que contienen valores de NA para Altura. No quiero esto. He intentado incluir argumentos para na.rm

f1 <- function ( x , na.rm = FALSE ) { df2 <- subset ( x , Height < 40 ) } f1 ( df1 , na.rm = FALSE )

pero esto no parece hacer nada; las filas con NA todavía terminan desapareciendo de mi marco de datos. ¿Hay alguna manera de subconjugar mis datos como tales, sin perder las filas de NA?


También puedes hacer:

df2 <- df1[(df1$Height < 40 | is.na(df1$Height)),]