Voici un petit morceau de code que j'ai écrit pour signaler les variables avec les valeurs manquantes d'un bloc de données. J'essaie de trouver une façon plus élégante de faire cela, une méthode qui renvoie peut-être un nom de données.fr, mais je suis bloquée:
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 à des centaines de variables, il est donc essentiel que nous ne rapportions que les variables avec des valeurs manquantes.
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
ou 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
On peut 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
Mon nouveau favori pour les données (pas trop larges) sont les méthodes de l'excellent paquet naniar . Vous obtenez non seulement des fréquences mais également des motifs de manque:
library(naniar)
library(UpSetR)
riskfactors %>%
as_shadow_upset() %>%
upset()
Il est souvent utile de voir où se situent les données manquantes par rapport à la valeur non manquante, ce qui peut être obtenu en traçant un nuage de points avec des données manquantes:
ggplot(airquality,
aes(x = Ozone,
y = Solar.R)) +
geom_miss_point()
Ou pour les variables catégoriques:
gg_miss_fct(x = riskfactors, fct = marital)
Ces exemples proviennent du paquet vignette qui répertorie d'autres visualisations intéressantes.
Plus succinct-: sum(is.na(x[1]))
C'est
x[1]
Regardez la première colonne
is.na()
vrai s'il s'agit de NA
sum()
TRUE
est 1
, FALSE
est 0
Une autre alternative graphique - la fonction plot_missing
De l'excellent paquet DataExplorer
:
Docs signale également que vous pouvez enregistrer ces résultats pour une analyse supplémentaire avec missing_data <- plot_missing(data)
.
Une autre fonction qui vous aiderait à 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)
Cela vous donnera le nombre et le pourcentage d'AN dans chaque colonne.
Pour une solution graphique supplémentaire, visdat
package offre vis_miss
.
library(visdat)
vis_miss(airquality)
Très similaire à la sortie de Amelia
avec une petite différence entre donner% s sur les ratés prêts à l'emploi.
Une autre façon graphique et interactive consiste à utiliser is.na10
fonction de la bibliothèque heatmaply
:
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"))
Cela ne fonctionnera probablement pas bien avec de grands ensembles de données.
Si vous voulez le faire pour une colonne en particulier, vous pouvez également utiliser cette option.
length(which(is.na(airquality[1])==T))
Je pense que la bibliothèque Amelia fait un travail agréable dans la gestion des données manquantes. Elle inclut également une carte permettant de visualiser les lignes manquantes.
install.packages("Amelia")
library(Amelia)
missmap(airquality)
Vous pouvez également exécuter le code suivant retournera les valeurs logiques de na
row.has.na <- apply(training, 1, function(x){any(is.na(x))})
Fonction du package d’ExPanDaR prepare_missing_values_graph
peut être utilisé pour explorer les données de panel: