Omettre les lignes contenant une colonne spécifique de NA

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