una - seleccionar datos en r
Omitir filas que contengan una columna especĂfica de NA (5)
Hadley''s tidyr
acaba de obtener esta increíble función drop_na
library(tidyr)
DF %>% drop_na(y)
x y z
1 1 0 NA
2 2 10 33
Quiero saber cómo omitir los valores de NA
en un marco de datos, pero solo en algunas columnas que me interesan.
Por ejemplo,
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
pero solo quiero omitir los datos donde y
es NA
, por lo tanto el resultado debe ser
x y z
1 1 0 NA
2 2 10 33
na.omit
parece eliminar todas las filas contienen cualquier NA
.
¿Puede alguien ayudarme con esta simple pregunta?
Pero si ahora cambio la pregunta como:
DF <- data.frame(x = c(1, 2, 3,NA), y = c(1,0, 10, NA), z=c(43,NA, 33, NA))
Si quiero omitir solo x=na
o z=na
, ¿dónde puedo colocar el |
¿en función?
Prueba esto:
cc=is.na(DF$y)
m=which(cc==c("TRUE"))
DF=DF[-m,]
Puede usar la función complete.cases
y ponerla en una función de esta manera:
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
completeFun <- function(data, desiredCols) {
completeVec <- complete.cases(data[, desiredCols])
return(data[completeVec, ])
}
completeFun(DF, "y")
# x y z
# 1 1 0 NA
# 2 2 10 33
completeFun(DF, c("y", "z"))
# x y z
# 2 2 10 33
EDITAR: solo devuelve filas sin NA
Si desea eliminar todas las filas con al menos una NA
en cualquier columna, simplemente use la función complete.cases
hacia arriba:
DF[complete.cases(DF), ]
# x y z
# 2 2 10 33
O si completeFun
ya está arraigado en su flujo de trabajo;)
completeFun(DF, names(DF))
Use ''subconjunto''
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
subset(DF, !is.na(y))
Use is.na
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
DF[!is.na(DF$y),]