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 ?

7voto

Martin Gal Points 4783

Desde dplyr s filter_all a été remplacée

Les verbes cadrés (_if, _at, _all) ont été remplacés par l'utilisation de across() dans un verbe existant.

et l'utilisation de across() en filter() est obsolète, Réponse de Ronak Pol a besoin d'une petite mise à jour. Pour trouver toutes les lignes avec un NA n'importe où, nous pourrions utiliser

library(dplyr)

DF %>% 
  filter(if_any(everything(), is.na))

pour obtenir

# A tibble: 1 x 2
   Var1 Var2  
  <dbl> <date>
1    20 NA

-1voto

jstar Points 352

Imprime toutes les lignes contenant des données NA :

tmp <- data.frame(c(1,2,3),c(4,NA,5));
tmp[round(which(is.na(tmp))/ncol(tmp)),]

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