web-dev-qa-db-fra.com

Sous-ensemble de lignes contenant des valeurs NA (manquantes) dans une colonne choisie d'un bloc de données

Nous avons un cadre de données à partir d'un fichier CSV. Le bloc de données DF contient des colonnes contenant des valeurs observées et une colonne (VaR2) contenant la date à laquelle une mesure a été prise. Si la date n'a pas été enregistrée, le fichier CSV contient la valeur NA pour les données manquantes.

Var1  Var2 
10   2010/01/01
20   NA
30   2010/03/01

Nous aimerions utiliser la commande subset pour définir un nouveau bloc de données new_DF de sorte qu'il ne contienne que des lignes contenant une valeur NA' de la colonne (VaR2). Dans l'exemple donné, seule la ligne 2 sera contenue dans le nouveau DF.

La commande

new_DF<-subset(DF,DF$Var2=="NA") 

ne fonctionne pas, le bloc de données résultant ne contient aucune entrée de ligne.

Si, dans le fichier CSV d'origine, les valeurs NA sont échangées avec NULL, la même commande produit le résultat souhaité: new_DF<-subset(DF,DF$Var2=="NULL").

Comment faire fonctionner cette méthode si, pour la chaîne de caractères, la valeur NA est fournie dans le fichier CSV d'origine?

83
John

N'utilisez jamais == 'NA' pour rechercher les valeurs manquantes. Utilisez is.na() à la place. Cela devrait le faire:

new_DF <- DF[rowSums(is.na(DF)) > 0,]

ou si vous souhaitez vérifier une colonne particulière, vous pouvez également utiliser

new_DF <- DF[is.na(DF$Var),]

Si vous avez des valeurs de caractères NA, commencez par

Df[Df=='NA'] <- NA

pour les remplacer par des valeurs manquantes.

127
Joris Meys

NA est une valeur spéciale dans R, ne mélangez pas la valeur NA avec la chaîne "NA". Selon la manière dont les données ont été importées, vos cellules "NA" et "NULL" peuvent être de types différents (le comportement par défaut consiste à convertir les chaînes "NA" en valeurs NA et à laisser les chaînes "NULL" telles quelles).

Si vous utilisez read.table () ou read.csv (), vous devez considérer l'argument "na.strings" pour effectuer une importation de données propres et travailler toujours avec des valeurs réelles de RNA.

Un exemple, travaillant dans les deux cas les cellules "NULL" et "NA":

DF <- read.csv("file.csv", na.strings=c("NA", "NULL"))
new_DF <- subset(DF, is.na(DF$Var2))
37
maressyl

complete.cases donne TRUE lorsque toutes les valeurs d'une ligne ne sont pas NA

DF[!complete.cases(DF), ]
27
user3226167
new_data <- data %>% filter_all(any_vars(is.na(.))) 

Cela devrait créer un nouveau bloc de données (new_data) contenant uniquement les valeurs manquantes.

Il est préférable de garder une trace des valeurs que vous pourrez éventuellement supprimer, car certaines colonnes contiennent des observations manquantes (NA).

6
Ronak Pol

Essayez de changer ceci:

new_DF<-dplyr::filter(DF,is.na(Var2)) 
3
drhnis