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?
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.
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))
complete.cases
donne TRUE
lorsque toutes les valeurs d'une ligne ne sont pas NA
DF[!complete.cases(DF), ]
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).
Essayez de changer ceci:
new_DF<-dplyr::filter(DF,is.na(Var2))