Comment remplacer les valeurs manquantes (NA) dans R : na.omit et na.rm
Les valeurs manquantes en science des donnรฉes surviennent lorsqu'une observation est manquante dans une colonne d'un bloc de donnรฉes ou contient une valeur de caractรจre au lieu d'une valeur numรฉrique. Les valeurs manquantes doivent รชtre supprimรฉes ou remplacรฉes afin de tirer des conclusions correctes ร partir des donnรฉes.
Dans ce tutoriel, nous apprendrons comment gรฉrer les valeurs manquantes avec la bibliothรจque dplyr. La bibliothรจque dplyr fait partie d'un รฉcosystรจme pour rรฉaliser une analyse de donnรฉes.
Dans ce tutoriel, vous apprendrez
- subir une mutation()
- Exclure les valeurs manquantes (NA)
- Imputer les valeurs manquantes (NA) avec la moyenne et la mรฉdiane
subir une mutation()
Le quatriรจme verbe du bibliothรจque dplyr est utile pour crรฉer une nouvelle variable ou modifier les valeurs d'une variable existante.
Nous procรฉderons en deux parties. Nous apprendrons comment :
- exclure les valeurs manquantes d'un bloc de donnรฉes
- imputer les valeurs manquantes avec la moyenne et la mรฉdiane
Le verbe mutate() est trรจs simple ร utiliser. Nous pouvons crรฉer une nouvelle variable en suivant cette syntaxe :
mutate(df, name_variable_1 = condition, ...) arguments: -df: Data frame used to create a new variable -name_variable_1: Name and the formula to create the new variable -...: No limit constraint. Possibility to create more than one variable inside mutate()
Exclure les valeurs manquantes (NA)
La mรฉthode na.omit() de la bibliothรจque dplyr est un moyen simple d'exclure les observations manquantes.ping L'รฉlimination des valeurs manquantes (NA) est simple, mais ce n'est pas pour autant la solution la plus รฉlรฉgante. Lors de l'analyse, il est judicieux d'utiliser diverses mรฉthodes pour traiter les valeurs manquantes.
Pour rรฉsoudre le problรจme des observations manquantes, nous utiliserons lโensemble de donnรฉes titanesque. Dans cet ensemble de donnรฉes, nous avons accรจs aux informations des passagers ร bord lors du drame. Cet ensemble de donnรฉes contient de nombreuses NA qui doivent รชtre prises en compte.
Nous allons tรฉlรฉcharger le fichier csv depuis Internet, puis vรฉrifier quelles colonnes contiennent NA. Pour renvoyer les colonnes avec des donnรฉes manquantes, nous pouvons utiliser le code suivant :
Tรฉlรฉchargeons les donnรฉes et vรฉrifions les donnรฉes manquantes.
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv" df_titanic <- read.csv(PATH, sep = ",") # Return the column names containing missing observations list_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ] list_na
Sortie :
## [1] "age" "fare"
Ici,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Donne le nom des colonnes qui ne contiennent pas de donnรฉes.
Les colonnes รขge et tarif comportent des valeurs manquantes.
Nous pouvons les supprimer avec na.omit().
library(dplyr) # Exclude the missing observations df_titanic_drop <-df_titanic %>% na.omit() dim(df_titanic_drop)
Sortie :
## [1] 1045 13
Le nouvel ensemble de donnรฉes contient 1045 1309 lignes, contre pour lโensemble de donnรฉes dโorigine.
Imputer les donnรฉes manquantes avec la moyenne et la mรฉdiane
Nous pourrions รฉgalement imputer (remplir) les valeurs manquantes avec la mรฉdiane ou la moyenne. Une bonne pratique consiste ร crรฉer deux variables distinctes pour la moyenne et la mรฉdiane. Une fois crรฉรฉes, nous pouvons remplacer les valeurs manquantes par les variables nouvellement formรฉes.
Nous utiliserons la mรฉthode apply pour calculer la moyenne de la colonne avec NA. Voyons un exemple
รtape 1) Plus tรดt dans le didacticiel, nous avons stockรฉ le nom des colonnes avec les valeurs manquantes dans la liste appelรฉe list_na. Nous utiliserons cette liste
รtape 2) Nous devons maintenant calculer la moyenne avec l'argument na.rm = TRUE. Cet argument est obligatoire car les colonnes contiennent des donnรฉes manquantes, ce qui indique ร R de les ignorer.
# Create mean
average_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],
2,
mean,
na.rm = TRUE)
average_missing
Code Explication:
Nous passons 4 arguments dans la mรฉthode apply.
- df : df_titanic[,colnames(df_titanic) %in% list_na]. Ce code renverra le nom des colonnes de l'objet list_na (c'est-ร -dire ยซ รขge ยป et ยซ tarif ยป)
- 2 : Calculer la fonction sur les colonnes
- moyenne : Calculer la moyenne
- na.rm = TRUE : ignorer les valeurs manquantes
Sortie :
## age fare ## 29.88113 33.29548
Nous avons rรฉussi ร crรฉer la moyenne des colonnes contenant les observations manquantes. Ces deux valeurs serviront ร remplacer les observations manquantes.
รtape 3) Remplacer les valeurs NA
Le verbe muter de la bibliothรจque dplyr est utile pour crรฉer une nouvelle variable. Nous ne voulons pas nรฉcessairement changer la colonne d'origine pour pouvoir crรฉer une nouvelle variable sans le NA. mutate est facile ร utiliser, il suffit de choisir un nom de variable et de dรฉfinir comment crรฉer cette variable. Voici le code complet
# Create a new variable with the mean and median df_titanic_replace <- df_titanic %>% mutate(replace_mean_age = ifelse(is.na(age), average_missing[1], age), replace_mean_fare = ifelse(is.na(fare), average_missing[2], fare))
Code Explication:
Nous crรฉons deux variables, replace_mean_age et replace_mean_fare comme suit :
- replace_mean_age = ifelse(is.na(age), Average_missing[1], age)
- replace_mean_fare = ifelse(is.na(tarif), Average_missing[2],tarif)
Si la colonne age a des valeurs manquantes, remplacez-la par le premier รฉlรฉment de Average_missing (moyenne de l'รขge), sinon conservez les valeurs d'origine. Mรชme logique pour le tarif
sum(is.na(df_titanic_replace$age))
Sortie :
## [1] 263
Effectuer le remplacement
sum(is.na(df_titanic_replace$replace_mean_age))
Sortie :
## [1] 0
La colonne age d'origine comporte 263 valeurs manquantes tandis que la variable nouvellement crรฉรฉe les a remplacรฉes par la moyenne de la variable age.
รtape 4) Nous pouvons รฉgalement remplacer les observations manquantes par la mรฉdiane.
median_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],
2,
median,
na.rm = TRUE)
df_titanic_replace <- df_titanic %>%
mutate(replace_median_age = ifelse(is.na(age), median_missing[1], age),
replace_median_fare = ifelse(is.na(fare), median_missing[2], fare))
head(df_titanic_replace)
Sortie :
รtape 5) Un ensemble de donnรฉes volumineuses peut contenir de nombreuses valeurs manquantes et la mรฉthode ci-dessus peut s'avรฉrer fastidieuse. Nous pouvons exรฉcuter toutes les รฉtapes ci-dessus dans une seule ligne de code en utilisant la mรฉthode sapply(). Bien que nous ne connaissions pas les valeurs moyennes et mรฉdianes.
sapply ne crรฉe pas de trame de donnรฉes, nous pouvons donc envelopper la fonction sapply() dans data.frame() pour crรฉer un objet de bloc de donnรฉes.
# Quick code to replace missing values with the mean
df_titanic_impute_mean < -data.frame(
sapply(
df_titanic,
function(x) ifelse(is.na(x),
mean(x, na.rm = TRUE),
x)))
Rรฉsumรฉ
Nous disposons de trois mรฉthodes pour gรฉrer les valeurs manquantes :
- Exclure toutes les observations manquantes
- Imputer avec la moyenne
- Imputer avec la mรฉdiane
Le tableau suivant rรฉsume comment supprimer toutes les observations manquantes
| Bibliothรจque | Objectif | Code |
|---|---|---|
| base | Liste des observations manquantes |
colnames(df)[apply(df, 2, anyNA)] |
| dรฉplyr | Supprimer toutes les valeurs manquantes |
na.omit(df) |
L'imputation avec moyenne ou mรฉdiane peut รชtre effectuรฉe de deux maniรจres
- Utiliser Appliquer
- Utiliser sapply
| Mรฉthode | DรTAILS | Avantages | Dรฉsavantages |
|---|---|---|---|
| รtape par รฉtape avec postuler | Vรฉrifiez les colonnes manquantes, calculez la moyenne/mรฉdiane, stockez la valeur, remplacez par mutate() | Vous connaissez la valeur de la moyenne/mรฉdiane | Plus de temps d'exรฉcution. Peut รชtre lent avec un grand ensemble de donnรฉes |
| Mรฉthode rapide avec sapply | Utilisez sapply() et data.frame() pour rechercher et remplacer automatiquement les valeurs manquantes par la moyenne/mรฉdiane | Code court et rapide | Je ne connais pas les valeurs d'imputation |



