Je veux savoir comment omettre les valeurs NA
dans 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
xyz 1 1 0 NA 2 2 10 33
na.omit
semble supprimer toutes les lignes contiennent des NA
.
Quelqu’un peut-il m’aider à sortir de cette simple question?
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 seulement x=na
ou z=na
, où puis-je mettre le |
en fonction?
Vous pouvez utiliser la fonction complete.cases
et la mettre ainsi dans une fonction:
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") # xyz # 1 1 0 NA # 2 2 10 33 completeFun(DF, c("y", "z")) # xyz # 2 2 10 33
EDIT: Renvoie uniquement les lignes sans NA
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), ] # xyz # 2 2 10 33
Ou si completeFun
est déjà enraciné dans votre stream 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),]
Le tidyr
de Hadley vient de tidyr
cette fonction étonnante drop_na
library(tidyr) DF %>% drop_na(y) xyz 1 1 0 NA 2 2 10 33
Utiliser ‘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))
Essaye ça:
cc=is.na(DF$y) m=which(cc==c("TRUE")) DF=DF[-m,]