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.

Remplacer les valeurs manquantes dans R

Dans ce tutoriel, vous apprendrez

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.

Exclure les valeurs manquantes

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 :

Imputer les donnรฉes manquantes avec la moyenne et la mรฉdiane

ร‰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

Rรฉsumez cet article avec :