131 votes

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

Nous disposons d'une base de données provenant d'un fichier CSV. La base de données DF comporte des colonnes contenant des valeurs observées et une colonne ( VaR2 ) qui contient 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 souhaitons utiliser la commande subset pour définir un nouveau cadre de données new_DF de telle sorte qu'il ne contienne que les lignes qui ont un NA' de la colonne ( VaR2 ). Dans l'exemple donné, seule la ligne 2 sera contenue dans le nouveau fichier DF .

La commande

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

ne fonctionne pas, le cadre de données résultant n'a pas d'entrées de ligne.

Si, dans le fichier CSV d'origine, la valeur NA sont échangés 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 fourni dans le fichier CSV d'origine ?

189voto

Joris Meys Points 38980

Ne jamais utiliser =='NA' pour tester les valeurs manquantes. Utiliser is.na() à la place. Cela devrait suffire :

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, exécutez d'abord

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

pour les remplacer par des valeurs manquantes.

66voto

user3226167 Points 690

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

DF[!complete.cases(DF), ]

42voto

maressyl Points 943

NA est une valeur spéciale dans R, ne pas confondre 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 différents types (le comportement par défaut est de convertir les chaînes "NA" en valeurs NA, et de laisser les chaînes "NULL" telles quelles).

Si vous utilisez read.table() ou read.csv(), vous devez prendre en compte l'argument "na.strings" pour importer des données propres, et toujours travailler avec de vraies valeurs R NA.

Un exemple, fonctionnant dans les deux cas avec des cellules "NULL" et "NA" :

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

28voto

Ronak Pol Points 141
new_data <- data %>% filter_all(any_vars(is.na(.))) 

Cela devrait créer un nouveau cadre de données ( new_data ) ne contenant que les valeurs manquantes.

Il est préférable de garder une trace des valeurs que vous pourriez abandonner par la suite parce qu'elles comportent des colonnes avec des observations manquantes (NA).

7voto

drhnis Points 63

Essayez de changer ceci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X