Je veux savoir comment omettre les valeurs NA
d'un bloc de données, mais uniquement dans certaines colonnes qui m'intéressent.
Par exemple,
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
mais je veux seulement omettre les données où y
est NA
, donc le résultat devrait être
x y z
1 1 0 NA
2 2 10 33
na.omit
semble supprimer toutes les lignes contenant n'importe quel NA
.
Quelqu'un peut-il m'aider à sortir de cette question simple?
Mais si maintenant je change la question comme:
DF <- data.frame(x = c(1, 2, 3,NA), y = c(1,0, 10, NA), z=c(43,NA, 33, NA))
Si je veux omettre uniquement x=na
ou z=na
, où puis-je placer le |
dans la fonction?
Vous pouvez utiliser la fonction complete.cases
et la placer comme suit:
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
EDIT: Renvoie uniquement les lignes sans NA
s
Si vous voulez éliminer toutes les lignes avec au moins une NA
dans une colonne, utilisez simplement la fonction complete.cases
:
DF[complete.cases(DF), ]
# x y z
# 2 2 10 33
Ou si completeFun
est déjà enraciné dans votre flux de travail;)
completeFun(DF, names(DF))
Utilisez 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),]
Hadley's tidyr
vient d'obtenir cette fonction étonnante drop_na
library(tidyr)
DF %>% drop_na(y)
x y z
1 1 0 NA
2 2 10 33
Utilisez 'sous-ensemble'
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
subset(DF, !is.na(y))
A présent, il est possible d'utiliser simplement:
na.omit(data, cols = c("x", "z"))
Essaye ça:
cc=is.na(DF$y)
m=which(cc==c("TRUE"))
DF=DF[-m,]
Omettez une ligne si l'une ou l'autre des deux colonnes spécifiques contient <NA>
.
DF[!is.na(DF$x)&!is.na(DF$z),]
Essayez ceci:
DF %>% t %>% na.omit %>% t