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.

167voto

Joshua Ulrich Points 68776

Il suffit d'utiliser sapply

> sapply(airquality, function(x) sum(is.na(x)))
  Ozone Solar.R    Wind    Temp   Month     Day 
     37       7       0       0       0       0

Vous pouvez également utiliser apply o colSums sur la matrice créée par is.na()

> apply(is.na(airquality),2,sum)
  Ozone Solar.R    Wind    Temp   Month     Day 
     37       7       0       0       0       0
> colSums(is.na(airquality))
  Ozone Solar.R    Wind    Temp   Month     Day 
     37       7       0       0       0       0

9voto

radek Points 1653

Mon nouveau favori pour les données (pas trop larges) sont les méthodes d'excellent naniar paquet. Vous obtenez non seulement des fréquences, mais aussi des modèles d'absence :

library(naniar)
library(UpSetR)

riskfactors %>%
  as_shadow_upset() %>%
  upset()

enter image description here

Il est souvent utile de voir où se situent les manquants par rapport aux non manquants, ce qui peut être réalisé en traçant un diagramme de dispersion avec les manquants :

ggplot(airquality,
       aes(x = Ozone,
           y = Solar.R)) +
 geom_miss_point()

enter image description here

Ou pour les variables catégorielles :

gg_miss_fct(x = riskfactors, fct = marital)

enter image description here

Ces exemples sont issus du paquet vignette qui énumère d'autres visualisations intéressantes.

8voto

Keiku Points 2485

Nous pouvons utiliser map_df avec purrr.

library(mice)
library(purrr)

# map_df with purrr
map_df(airquality, function(x) sum(is.na(x)))
# A tibble: 1 × 6
# Ozone Solar.R  Wind  Temp Month   Day
# <int>   <int> <int> <int> <int> <int>
# 1    37       7     0     0     0     0

6voto

stats0007 Points 770
summary(airquality)

vous donne déjà cette information

El VIM Les paquets offrent également un joli tracé des données manquantes pour data.frame.

library("VIM")
aggr(airquality)

enter image description here

5voto

radek Points 1653

Une autre alternative graphique - plot_missing fonction de l'excellent DataExplorer paquet :

enter image description here

Docs souligne également le fait que vous pouvez sauvegarder ces résultats pour une analyse complémentaire avec missing_data <- plot_missing(data) .

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