86 votes

Une façon élégante de rapporter les valeurs manquantes dans un data.frame

Voici un petit morceau de code que j'ai écrit pour signaler les variables avec des valeurs manquantes dans un cadre de données. J'essaie de trouver une façon plus élégante de le faire, qui renvoie peut-être un data.frame, mais je suis coincé :

for (Var in names(airquality)) {
    missing <- sum(is.na(airquality[,Var]))
    if (missing > 0) {
        print(c(Var,missing))
    }
}

Edit : Je traite des data.frames avec des dizaines ou des centaines de variables, il est donc essentiel que nous ne signalions que les variables avec des valeurs manquantes.

4voto

Plus succinct.. : sum(is.na(x[1]))

C'est-à-dire

  1. x[1] Regardez la première colonne

  2. is.na() vrai si c'est NA

  3. sum() TRUE est 1 , FALSE est 0

2voto

Une autre fonction qui pourrait vous aider à examiner les données manquantes serait df_status de la bibliothèque funModeling.

library(funModeling)

iris.2 est le jeu de données iris avec quelques NA ajoutés. Vous pouvez le remplacer par votre jeu de données.

df_status(iris.2)

Vous obtiendrez ainsi le nombre et le pourcentage de NA dans chaque colonne.

2voto

radek Points 1653

Pour une autre solution graphique, visdat paquet offre vis_miss .

library(visdat)
vis_miss(airquality)

enter image description here

Très similaire à Amelia avec une petite différence d'attribution de % sur les ratés hors de la boîte.

1voto

drexxx Points 32

Je pense que la bibliothèque Amelia fait un bon travail dans la gestion des données manquantes et inclut également une carte pour visualiser les lignes manquantes.

install.packages("Amelia")
library(Amelia)
missmap(airquality)

enter image description here

Vous pouvez également exécuter le code suivant qui retournera les valeurs logiques de na

row.has.na <- apply(training, 1, function(x){any(is.na(x))})

1voto

radek Points 1653

Un autre moyen graphique et interactif consiste à utiliser is.na10 de la fonction heatmaply bibliothèque :

library(heatmaply)

heatmaply(is.na10(airquality), grid_gap = 1, 
          showticklabels = c(T,F),
            k_col =3, k_row = 3,
            margins = c(55, 30), 
            colors = c("grey80", "grey20"))

enter image description here

Cela ne fonctionnera probablement pas bien avec les grands ensembles de données

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