Comment remplacer les valeurs manquantes (NA) dans R: na.omit & na.rm

Table des matières:

Anonim

Les valeurs manquantes dans la 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 une conclusion correcte des données.

Dans ce didacticiel, nous allons apprendre à 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 de la 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 à:

  • 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 une observation manquante. Supprimer tout le NA des données est facile mais cela ne signifie pas que c'est la solution la plus élégante. Lors de l'analyse, il est sage d'utiliser diverses méthodes pour traiter les valeurs manquantes

Pour résoudre le problème des observations manquantes, nous utiliserons le jeu de données titanesque. Dans cet ensemble de données, nous avons accès aux informations des passagers à bord lors de la tragédie. Cet ensemble de données contient de nombreux NA qui doivent être pris en charge.

Nous téléchargerons le fichier csv depuis Internet, puis vérifierons quelles colonnes ont 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 observationslist_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ]list_na

Production:

## [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 age et tarif ont des valeurs manquantes.

Nous pouvons les supprimer avec le na.omit ().

library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)

Production:

## [1] 1045 13

Le nouvel ensemble de données contient 1045 lignes contre 1309 avec 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 ont des données manquantes, ce qui indique à R de les ignorer.

# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing

Explication du code:

Nous passons 4 arguments dans la méthode apply.

  • df: df_titanic [, colnames (df_titanic)% dans% list_na]. Ce code renverra le nom des colonnes de l'objet list_na (ie "age" et "fare")
  • 2: Calculez la fonction sur les colonnes
  • mean: calculer la moyenne
  • na.rm = TRUE: ignore les valeurs manquantes

Production:

## age fare## 29.88113 33.29548

Nous avons réussi à créer la moyenne des colonnes contenant des observations manquantes. Ces deux valeurs seront utilisées pour remplacer les observations manquantes.

Étape 3) Remplacez les valeurs NA

Le verbe mutate de la bibliothèque dplyr est utile pour créer une nouvelle variable. Nous ne voulons pas nécessairement changer la colonne d'origine afin de pouvoir créer une nouvelle variable sans NA. mutate est facile à utiliser, nous choisissons simplement un nom de variable et définissons comment créer cette variable. Voici le code complet

# Create a new variable with the mean and mediandf_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))

Explication du code:

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 l'âge de la colonne a des valeurs manquantes, remplacez-le par le premier élément de average_missing (moyenne d'âge), sinon conservez les valeurs d'origine. Même logique pour le tarif

sum(is.na(df_titanic_replace$age))

Production:

## [1] 263

Effectuer le remplacement

sum(is.na(df_titanic_replace$replace_mean_age))

Production:

## [1] 0 

L'âge de la colonne d'origine a 263 valeurs manquantes tandis que la variable nouvellement créée les a remplacées par la moyenne de l'âge de la variable.

É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)

Production:

Étape 5) Un ensemble de données volumineuses pourrait avoir beaucoup de valeurs manquantes et la méthode ci-dessus pourrait être lourde. Nous pouvons exécuter toutes les étapes ci-dessus dans une ligne de code en utilisant la méthode sapply (). Bien que nous ne connaissions pas les valeurs de la moyenne et de la médiane.

sapply ne crée pas de bloc 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 meandf_titanic_impute_mean < -data.frame(sapply(df_titanic,function(x) ifelse(is.na(x),mean(x, na.rm = TRUE),x)))

Résumé

Nous avons trois méthodes pour traiter 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 se faire de deux manières

  • Utiliser Apply
  • Utiliser sapply
Méthode Des détails Avantages Désavantages
Étape par étape avec Apply Vérifiez les colonnes manquantes, calculez la moyenne / la médiane, stockez la valeur, remplacez-la par mutate () Vous connaissez la valeur des moyennes / médiane Plus de temps d'exécution. Peut être lent avec un grand ensemble de données
Manière rapide avec sapply Utilisez sapply () et data.frame () pour rechercher et remplacer automatiquement les valeurs manquantes par moyenne / médiane Code court et rapide Je ne connais pas les valeurs d'imputation