Accéder au contenu principal

Comment utiliser na.rm pour traiter les valeurs manquantes dans R

Nous avons défini na.rm = VRAI dans les fonctions R courantes afin d'exclure les valeurs manquantes (NA). Cela nous permet de calculer des statistiques précises et d'améliorer la fiabilité de nos résultats.
Actualisé 15 janv. 2025  · 8 min de lecture

Les données sont générées et consommées à un rythme industriel pour prendre des décisions clés. Cependant, la présence de valeurs manquantes constitue un problème courant dans l'analyse des données. Cela peut fausser les résultats, et il est donc inévitable pour tout analyste de données de les traiter efficacement. Dans R, l'un des outils fondamentaux pour gérer les valeurs manquantes est le paramètre na.rm.

Cet article explique l'importance du traitement des données manquantes, le fonctionnement de na.rm dans R, son utilisation dans différentes fonctions et conclut en discutant de quelques techniques alternatives pour identifier et traiter les données manquantes.

La réponse courte : Qu'est-ce que na.rm ?

Le paramètre na.rm dans R signifie "NA remove" et ignore NA (valeurs manquantes) lors des calculs. En définissant na.rm = TRUE, les fonctions telles que mean(), sum(), min(), max(), median() et sd() calculent les résultats sans être affectées par les valeurs manquantes.

Le paramètre na.rm, écrit en minuscules, comprend une valeur booléenne -TRUE ou FALSE. Lorsque nous définissons na.rm = TRUE, R exclut les valeurs de NA des calculs. Sans ce paramètre, les fonctions renverraient NA si des valeurs manquantes sont présentes dans les données. Jetez un coup d'œil.

vector_with_na <- c(1, 2, NA)

sum(vector_with_na, na.rm = TRUE) # removes NA values — returns 3
sum(vector_with_na) # includes NA values — returns NA
sum(vector_with_na, na.rm = FALSE) # includes NA values — returns NA

Consultez le cours Introduction à R pour en savoir plus sur la programmation R de base.

Pourquoi utiliser na.rm ?

Le traitement des valeurs manquantes est crucial dans l'analyse des données pour garantir des résultats exacts, car elles peuvent avoir un impact significatif sur les calculs statistiques, conduisant par inadvertance à des conclusions incorrectes. L'utilisation de na.rm permet d'éviter les erreurs en ignorant ces valeurs manquantes, ce qui permet d'effectuer des calculs fiables et de maintenir l'intégrité des données.

Le cours " Data Cleaning in R" (nettoyage de données en R) est très utile pour améliorer nos compétences en matière d'analyse de données.

Fonctions courantes utilisant na.rm : Quelques exemples pratiques

Comprenons maintenant comment utiliser na.rm dans R. Plusieurs fonctions R intègrent le paramètre na.rm (fixé par défaut à FALSE ). Voici quelques exemples courants :

sum()

Comme son nom l'indique, sum() calcule le total des valeurs d'un vecteur. Créons un vecteur appelé vector_with_na, que nous utiliserons tout au long de ce tutoriel.

vector_with_na <- c(1, 2, NA, 4)

sum(vector_with_na) 
# Returns NA

sum(vector_with_na, na.rm = TRUE) 
# Returns 7

moyenne()

En reprenant le même exemple, la fonction mean() calcule la moyenne, c'est-à-dire la moyenne des valeurs de notre vecteur.

mean(vector_with_na) 
# Returns NA

mean(vector_with_na, na.rm = TRUE) 
# Returns 2.33

sd()

En continuant avec vector_with_na, sd() calcule l'écart-type du vecteur.

sd(vector_with_na) 
# Returns NA

sd(vector_with_na, na.rm = TRUE) 
# Returns 1.53

min()

Le site min() recherche la valeur minimale.

min(vector_with_na) 
# Returns NA

min(vector_with_na, na.rm = TRUE) 
# Returns 1

max()

max() trouve la valeur maximale.

max(vector_with_na) 
# Returns NA

max(vector_with_na, na.rm = TRUE) 
# Returns 4

médiane()

median() trouve la valeur médiane lorsqu'elle est classée dans l'ordre.

median(vector_with_na) 
# Returns NA

median(vector_with_na, na.rm = TRUE) 
# Returns 2

Notez qu'en l'absence de na.rm = TRUE, toutes ces fonctions agrégées renvoient NA.

En définissant na.rm = TRUE, ces fonctions excluent les valeurs de NA, ce qui permet des calculs précis et significatifs. Le cursus R Programming Fundamentals peut être une bonne ressource pour mieux comprendre l'utilisation et la syntaxe de ces fonctions.

Traitement des valeurs manquantes dans différentes structures de données

Voyons comment traiter les valeurs manquantes dans différentes structures de données. Avant de poursuivre, consultez notre Maîtriser les structures de données dans le langage de programmation R si vous souhaitez en savoir plus sur les structures de données R. 

Vecteurs

Dans les vecteurs, na.rm peut être utilisé directement dans les fonctions pour exclure les valeurs manquantes. Les exemples présentés dans la section précédente sont tous des exemples de na.rm en action sur des vecteurs.

Trames de données

Pour les cadres de données, na.rm peut être appliqué au sein des fonctions utilisées sur des colonnes spécifiques ou sur plusieurs lignes à l'aide de apply(), comme indiqué ci-dessous :

apply(X, MARGIN, FUN)

Ici :

  • Xun tableau, un cadre de données ou une matrice

  • MARGIN: argument permettant d'identifier l'endroit où appliquer la fonction :

    • MARGIN=1 pour la manipulation des lignes

    • MARGIN=2 pour la manipulation des colonnes

    • MARGIN=c(1,2) pour la manipulation des lignes et des colonnes

  • FUN: indique la fonction à appliquer. Des fonctions intégrées telles que mean(), median(), sum(), min(), max(), et des fonctions définies par l'utilisateur peuvent être appliquées.

Créons un cadre de données qui nous servira de référence tout au long de ce tutoriel.

dataframe_with_na <- data.frame(col1 = c(1, NA, 3, 6), col2 = c(4, 5, NA, 7))

print(dataframe_with_na)
# Returns
#   col1 col2
# 1    1    4
# 2   NA    5
# 3    3   NA
# 4    6    7

apply(dataframe_with_na, 1, mean)
# Returns
# [1] 2.5  NA  NA 6.5

apply(dataframe_with_na, 1, mean, na.rm = TRUE)
# Returns
# [1] 2.5 5.0 3.0 6.5

apply(dataframe_with_na, 2, mean)
# Returns
# col1 col2 
#  NA   NA 

apply(dataframe_with_na, 2, mean, na.rm = TRUE)
# Returns   
#   col1     col2 
# 3.333333 5.333333

Listes

La fonction lapply() de R est utilisée pour appliquer une fonction spécifiée à chaque élément d'une liste, d'un vecteur ou d'une base de données, et renvoie une liste de même longueur. Cette fonction ne nécessite pas de paramètre MARGIN, car elle applique automatiquement l'opération à tous les éléments.

Syntaxe :

lapply(vector_with_na, fun)

Ici :

  • vector_with_na: La liste, le vecteur ou le cadre de données en entrée.
  • fun: La fonction à appliquer à chaque élément de données d'entrée.

Comprenons lapply() à l'aide d'un exemple de liste. Nous avons ici une liste de collections (item_1 et item_2) avec des éléments similaires au cadre de données (dataframe_with_na). Notre objectif est de trouver la moyenne de chaque collection.

list_with_na <- list(item_1=c(1, NA, 3, 6), item_2=c(4, 5, NA, 7))

lapply(list_with_na, mean)
# Returns
# $item_1
# [1] NA
# 
# $item_2
# [1] NA

lapply(list_with_na, mean, na.rm =TRUE)
# Returns
# $item_1
# [1] 3.333333
# 
# $item_2
# [1] 5.333333

La fonction sapply() est similaire à lapply() mais renvoie un tableau ou une matrice au lieu d'une liste. Utilisons la liste (list_with_na) et le site sapply() pour calculer la moyenne des valeurs de chaque collection qu'elle contient.

sapply(list_with_na, mean)
# Returns
# a  b 
# NA NA 

sapply(list_with_na, mean, na.rm = TRUE)

# Returns
# a        b 
# 3.333333 5.333333

Utilisons maintenant la base de données (dataframe_with_na) et le site sapply() pour calculer la somme des valeurs de chaque colonne.

sapply(dataframe_with_na, sum)

# Returns
# col1 col2 
# NA   NA 

sapply(dataframe_with_na, sum, na.rm=TRUE)
# Returns
# col1 col2 
# 10   16

Pour une meilleure compréhension de la manipulation des données dans R, le cours Data Manipulation with dplyr est fortement recommandé. Si vous avez des doutes sur la famille de fonctions apply() en particulier, lisez notre tutoriel sur la famille Apply de R.

Comparaison avec na.omit() et complete.cases()

na.omit(): Cette fonction supprime toutes les lignes contenant les valeurs NA dans un cadre de données. Comprenons-le par un exemple :

na.omit(dataframe_with_na)
# Returns
# col1 col2
# 1    1    4
# 4    6    7

complete.cases(): D'autre part, complete.cases() identifie les lignes sans aucune valeur NA et renvoie un bool correspondant à chaque ligne (FALSE pour les lignes avec NA et vice-versa). Cette fonction peut être utilisée pour filtrer les valeurs non manquantes dans le cadre de données, comme indiqué ci-dessous.

complete.cases(dataframe_with_na)
# Returns
# [1]  TRUE FALSE FALSE  TRUE

dataframe_with_na[complete.cases(dataframe_with_na), ]
# Returns
# col1 col2
# 1    1    4
# 4    6    7

Techniques avancées de traitement des valeurs manquantes

Au-delà de na.rm, R propose des méthodes avancées pour traiter les données manquantes :

Utiliser is.na() pour identifier les valeurs manquantes

is.na() peut être appliqué directement sur un vecteur ou une base de données pour identifier les données manquantes. Il renvoie une adresse TRUE correspondant à chaque valeur manquante.

is.na(vector_with_na)
# Returns
# [1] FALSE FALSE  TRUE FALSE

is.na(dataframe_with_na)
# Returns
# col1  col2
# [1,] FALSE FALSE
# [2,]  TRUE FALSE
# [3,] FALSE  TRUE
# [4,] FALSE FALSE

Application des méthodes d'imputation

L'imputation remplace les valeurs manquantes par des valeurs estimées, telles que la moyenne ou la médiane, comme indiqué ci-dessous :

vector_with_na[is.na(vector_with_na)] <- mean(vector_with_na, na.rm = TRUE)

print(vector_with_na)
# Returns
# [1] 1.000000 2.000000 2.333333 4.000000

dataframe_with_na[is.na(dataframe_with_na)] <- sapply(dataframe_with_na, mean, na.rm=TRUE)
print(dataframe_with_na)
# Returns
# col1     col2
# 1 1.000000 4.000000
# 2 3.333333 5.000000
# 3 3.000000 5.333333
# 4 6.000000 7.000000

Utilisation de la fonction summary()

Il est intéressant de noter que la fonctionsummary() diffère de la fonction na.rm pour le traitement des valeurs manquantes. Par défaut, summary() exclut automatiquement les valeurs manquantes lors du calcul des statistiques sommaires et indique ensuite le nombre de NAs présents dans les données.

Exécutons summary() sur le vecteur vector_with_na:

summary(vector_with_na)
#Returns
#   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
#  1.000   1.500   2.000   2.333   3.000   4.000       1

Et sur le cadre de données dataframe_with_na:

summary(dataframe_with_na)
# Returns
# col1           col2     
# Min.   :1.00   Min.   :4.00  
# 1st Qu.:2.50   1st Qu.:4.75  
# Median :3.00   Median :5.00  
# Mean   :3.25   Mean   :5.25  
# 3rd Qu.:3.75   3rd Qu.:5.50  
# Max.   :6.00   Max.   :7.00 

Le cours R intermédiaire offre des connaissances approfondies aux personnes intéressées par des techniques de traitement de données plus avancées.

Meilleures pratiques pour le traitement des valeurs manquantes

Le traitement efficace des valeurs manquantes implique plusieurs bonnes pratiques :

Vérifiez toujours les valeurs manquantes

Identifiez et comprenez l'étendue des données manquantes avant d'effectuer des calculs. L'exemple ci-dessous montre que le cadre de données comporte un total de 2 valeurs manquantes.

print(dataframe_with_na)
# Returns
# col1 col2
# 1    1    4
# 2   NA    5
# 3    3   NA
# 4    6    7

sum(is.na(dataframe_with_na))
# Returns
# [1] 2

Utiliser des contrôles conditionnels

Vérifiez toujours la présence de données manquantes et appliquez en conséquence les techniques d'imputation, en veillant à ce que tous les cas limites soient bien traités.

if(any(is.na(dataframe_with_na))) {  
  if (class(dataframe_with_na) == "data.frame") {    
   dataframe_with_na[is.na(dataframe_with_na)] <- sapply(dataframe_with_na, median, na.rm=TRUE)      
  }
}

print(dataframe_with_na)
# Returns
# col1 col2
# 1    1    4
# 2    3    5
# 3    3    5
# 4    6    7

Tenez compte du contexte

Comprendre pourquoi les données sont manquantes et choisir une méthode appropriée pour les traiter - suppression ou imputation.

Pour une approche structurée de l'analyse des données et de la gestion des valeurs manquantes, le manuel Nettoyage de données en R peut être une excellente ressource.

Conclusion

La compréhension et l'utilisation de na.rm sont essentielles pour garantir une analyse fiable et précise des données. Entraînez-vous à utiliser na.rm dans des projets R et explorez des techniques avancées pour traiter les données manquantes de manière exhaustive.

Pour en savoir plus, explorez ces ressources supplémentaires :


Vidhi Chugh's photo
Author
Vidhi Chugh
LinkedIn

Je suis un stratège de l'IA et un éthicien qui travaille à l'intersection de la science des données, du produit et de l'ingénierie pour construire des systèmes d'apprentissage automatique évolutifs. Considéré comme l'un des 200 plus grands innovateurs commerciaux et technologiques au monde, je me suis donné pour mission de démocratiser l'apprentissage automatique et de briser le jargon pour que tout le monde puisse participer à cette transformation.

Questions fréquemment posées

Qu'est-ce que le paramètre na.rm dans R ?

Le paramètre na.rm dans R signifie "NA remove". Lorsqu'il est défini sur VRAI, il indique aux fonctions d'ignorer les valeurs NA (manquantes) lors des calculs, ce qui garantit des résultats précis.

Comment utilisez-vous na.rm dans les fonctions courantes de R ?

Vous pouvez utiliser na.rm dans des fonctions telles que sum(), mean(), sd(), min(), max(), et median() en paramétrant na.rm = TRUE pour exclure les valeurs manquantes des calculs.

Pourquoi le traitement des valeurs manquantes est-il important dans l'analyse des données ?

Les valeurs manquantes peuvent fausser les résultats et conduire à des conclusions inexactes. Leur traitement efficace garantit la fiabilité des calculs et l'intégrité des données.

Peut-on utiliser na.rm avec des cadres de données et des listes dans R ?

Oui, na.rm peut être utilisé avec des cadres de données à l'aide de fonctions telles que apply(), et avec des listes à l'aide de lapply() et sapply(), afin d'exclure les valeurs manquantes lors d'opérations sur ces structures de données.

Quelles sont les techniques avancées pour traiter les valeurs manquantes dans R ?

Outre na.rm, les techniques avancées comprennent l'utilisation de is.na() pour identifier les valeurs manquantes, l'application de méthodes d'imputation pour les remplacer et l'utilisation de fonctions telles que na.omit() et complete.cases() pour un nettoyage plus complexe des données.

Sujets

Apprenez R avec DataCamp

Certification disponible

cours

Introduction à R

4 hr
2.7M
Maîtrisez les bases de l'analyse de données en R, y compris les vecteurs, les listes et les cadres de données, et pratiquez R avec des ensembles de données réels.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow
Apparenté

blog

Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Vous êtes actuellement à la recherche d'un emploi qui utilise Snowflake ? Préparez-vous à répondre à ces 20 questions d'entretien sur le flocon de neige pour décrocher le poste !
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 min

blog

2022-2023 Rapport annuel DataCamp Classrooms

À l'aube de la nouvelle année scolaire, DataCamp Classrooms est plus motivé que jamais pour démocratiser l'apprentissage des données, avec plus de 7 650 nouveaux Classrooms ajoutés au cours des 12 derniers mois.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 min

blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates a offert plus de 20k bourses d'études à nos partenaires à but non lucratif au deuxième trimestre 2023. Découvrez comment des apprenants défavorisés et assidus ont transformé ces opportunités en réussites professionnelles qui ont changé leur vie.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

blog

Nous avons fait don de bourses DataCamp Premium à un million de personnes, et ce n'est pas fini.

Réparties entre nos deux programmes d'impact social, DataCamp Classrooms et #DCDonates, les bourses offrent un accès illimité à tout ce que DataCamp Premium a à offrir.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

blog

Les 32 meilleures questions d'entretien sur AWS et leurs réponses pour 2024

Un guide complet pour explorer les questions d'entretien AWS de base, intermédiaires et avancées, ainsi que des questions basées sur des situations réelles. Il couvre tous les domaines, garantissant ainsi une stratégie de préparation bien équilibrée.
Zoumana Keita 's photo

Zoumana Keita

30 min

blog

Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Découvrez le parcours inspirant de Saghar Hazinyar, diplômée de Code to Inspire, qui a surmonté les défis en Afghanistan et s'est épanouie grâce à une bourse de DataCamp Donates.
Fereshteh Forough's photo

Fereshteh Forough

4 min

Voir plusVoir plus