NA dans les calculs et les agrégations
Contrôlez le comportement de NA dans mean(), sum() et les autres fonctions d’agrégation.
NA dans les calculs et les agrégations est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.
Le paramètre na.rm
La plupart des fonctions d’agrégation de R acceptent un argument na.rm (suppression des NA). Lorsqu’il vaut TRUE, la fonction ignore les valeurs NA avant de calculer le résultat. Par défaut, na.rm = FALSE, les NA se propagent donc.
scores <- c(88, NA, 72, 95, NA, 81, 67)
cat('With na.rm=FALSE (default):
')
cat(' mean:', mean(scores), '
') # NA
cat(' sum: ', sum(scores), '
') # NA
cat('With na.rm=TRUE:
')
cat(' mean:', mean(scores, na.rm = TRUE), '
') # 80.6
cat(' sum: ', sum(scores, na.rm = TRUE), '
') # 403mean() avec na.rm
mean(x, na.rm = TRUE) calcule la moyenne arithmétique des valeurs non manquantes. Le dénominateur correspond au nombre de valeurs présentes, et non à la longueur totale.
temperatures <- c(22.1, NA, 19.8, 25.1, NA, 17.3, 20.0)
cat('Total elements:', length(temperatures), '
')
cat('Present elements:', sum(!is.na(temperatures)), '
')
cat('Mean (na.rm=TRUE):', mean(temperatures, na.rm = TRUE), '
')
# Manual verification
cat('Manual mean:', sum(temperatures, na.rm=TRUE) / sum(!is.na(temperatures)), '
')sum() avec na.rm
sum(x, na.rm = TRUE) additionne uniquement les valeurs non-NA. C’est essentiel pour compter les valeurs TRUE dans un vecteur logique qui peut contenir des NA, ou pour calculer des totaux à partir de données incomplètes.
sales_daily <- c(1200, NA, 980, 1450, NA, 1100, 890)
cat('Sum (default):', sum(sales_daily), '
') # NA
cat('Sum (na.rm): ', sum(sales_daily, na.rm = TRUE), '
') # 5620
# Count observations meeting a condition (NA-safe)
cat('Days over 1000:', sum(sales_daily > 1000, na.rm = TRUE), '
')min() et max() avec na.rm
min() et max() possèdent également le paramètre na.rm. Sans ce paramètre, un seul NA dans l’entrée suffit à faire renvoyer NA à la fonction. Avec na.rm = TRUE, les valeurs extrêmes parmi les valeurs présentes sont renvoyées.
blood_pressure <- c(120, NA, 135, 118, NA, 142, 125, NA, 130)
cat('Max BP (default):', max(blood_pressure), '
') # NA
cat('Max BP (na.rm): ', max(blood_pressure, na.rm = TRUE), '
') # 142
cat('Min BP (na.rm): ', min(blood_pressure, na.rm = TRUE), '
') # 118
cat('Range (na.rm): ', range(blood_pressure, na.rm = TRUE), '
')var() et sd() avec na.rm
La variance (var()) et l’écart type (sd()) prennent également en charge na.rm. Elles calculent la statistique en utilisant uniquement les observations non manquantes et ajustent automatiquement les degrés de liberté.
exam_scores <- c(78, 85, NA, 92, 68, 75, NA, 88, 91, NA)
n_valid <- sum(!is.na(exam_scores))
cat('Valid observations:', n_valid, '
')
cat('Mean: ', round(mean(exam_scores, na.rm = TRUE), 2), '
')
cat('SD: ', round(sd(exam_scores, na.rm = TRUE), 2), '
')
cat('Var: ', round(var(exam_scores, na.rm = TRUE), 2), '
')median() et quantile() avec na.rm
median() et quantile() sont souvent plus robustes aux valeurs aberrantes que la moyenne, mais elles nécessitent également na.rm = TRUE pour traiter correctement les valeurs manquantes.
incomes <- c(45000, NA, 52000, 48000, NA, 210000, 51000, NA, 49000)
cat('Observations:', sum(!is.na(incomes)), '
')
cat('Median income:', median(incomes, na.rm = TRUE), '
')
cat('Mean income: ', mean(incomes, na.rm = TRUE), '
') # pulled up by 210000
cat('25th pctile: ', quantile(incomes, 0.25, na.rm = TRUE), '
')
cat('75th pctile: ', quantile(incomes, 0.75, na.rm = TRUE), '
')prod() et cumsum() avec na.rm
prod(x, na.rm = TRUE) calcule le produit des valeurs non-NA. Les fonctions cumulatives telles que cumsum() ne possèdent PAS de paramètre na.rm : les NA se propagent à partir de la première valeur manquante.
growth_rates <- c(1.05, NA, 1.03, 1.08, NA, 1.02)
cat('Product of rates:', prod(growth_rates, na.rm = TRUE), '
')
# cumsum propagates NAs
values <- c(10, 20, NA, 40, 50)
cat('cumsum (with NA):', cumsum(values), '
')
# Workaround: replace NA first
filled <- replace(values, is.na(values), 0)
cat('cumsum (NA=0): ', cumsum(filled), '
')na.rm dans les fonctions apply
Lorsque vous utilisez apply() sur les lignes ou les colonnes d’une matrice, vous pouvez transmettre na.rm = TRUE à la fonction à l’aide de .... Cela calcule les agrégats en ignorant les NA.
m <- matrix(c(88,NA,72, 95,81,NA, 67,75,90), nrow = 3)
cat('Matrix:
'); print(m)
# Row means ignoring NAs
cat('Row means (na.rm=TRUE):', apply(m, 1, mean, na.rm = TRUE), '
')
# Col means ignoring NAs
cat('Col means (na.rm=TRUE):', apply(m, 2, mean, na.rm = TRUE), '
')rowSums() / colSums() avec na.rm
rowSums() et colSums() possèdent leur propre paramètre na.rm (il n’est pas transmis via ...). Avec na.rm = TRUE, elles traitent NA comme 0 dans les sommes.
sales <- matrix(c(100,NA,80, NA,90,70, 110,85,NA), nrow = 3)
cat('Sales matrix:
'); print(sales)
cat('Row sums (na.rm=F):', rowSums(sales), '
') # NAs propagate
cat('Row sums (na.rm=T):', rowSums(sales, na.rm = TRUE), '
')
cat('Col means (na.rm=T):', colMeans(sales, na.rm = TRUE), '
')Comparaison : na.rm=FALSE ou TRUE
Comprendre quand utiliser na.rm = TRUE plutôt que FALSE dépend de l’objectif de votre analyse : FALSE garantit que vous détectez les données incomplètes ; TRUE calcule des statistiques au mieux à partir des données disponibles.
# Always check: how much data is missing BEFORE using na.rm=TRUE
collected <- c(78, NA, 85, NA, 91, 74, NA, 88, 82, NA)
pct_missing <- mean(is.na(collected)) * 100
cat('Missing:', round(pct_missing, 1), '% of data
')
if (pct_missing < 20) {
cat('Acceptable: computing mean with na.rm=TRUE
')
cat('Mean:', round(mean(collected, na.rm = TRUE), 2), '
')
} else {
cat('Too much missing data — investigate before computing
')
}na.rm dans les fonctions utilisateur
Lorsque vous écrivez vos propres fonctions d’agrégation, incluez un paramètre na.rm et transmettez-le aux fonctions de base de R. Vos fonctions respecteront ainsi les conventions de R.
# Custom function with na.rm support
cv <- function(x, na.rm = FALSE) {
# Coefficient of Variation = SD / mean
s <- sd(x, na.rm = na.rm)
m <- mean(x, na.rm = na.rm)
return(s / m)
}
readings <- c(22.1, NA, 19.8, 25.1, NA, 17.3, 20.0)
cat('CV (na.rm=FALSE):', cv(readings), '
') # NA
cat('CV (na.rm=TRUE): ', round(cv(readings, na.rm = TRUE), 4), '
')Vérification rapide
Que renvoie mean(c(10, 20, NA, 40), na.rm = TRUE) ?
Récapitulatif : NA dans les calculs
Excellent ! Voici les points essentiels de cette leçon :
- La plupart des fonctions d’agrégation (
mean,sum,min,max,sd, etc.) possèdent un paramètrena.rm na.rm = FALSE(valeur par défaut) signifie que NA se propage : si une valeur vaut NA, le résultat vaut NAna.rm = TRUEignore les NA et calcule la statistique uniquement à partir des valeurs présentes- Le dénominateur de
mean(na.rm=TRUE)correspond au nombre de valeurs qui ne sont pas NA, et non à la longueur totale - Vérifiez toujours la proportion de données manquantes avant de calculer des statistiques avec
na.rm=TRUE - Incluez
na.rmdans vos propres fonctions d’agrégation pour respecter les conventions de R
# Complete summary with na.rm
data_vec <- c(55, NA, 72, 88, NA, 61, 79, NA, 93, 68)
cat('N valid:', sum(!is.na(data_vec)), '
')
cat('Mean: ', round(mean(data_vec, na.rm=TRUE), 2), '
')
cat('Median:', median(data_vec, na.rm=TRUE), '
')
cat('SD: ', round(sd(data_vec, na.rm=TRUE), 2), '
')
cat('Min: ', min(data_vec, na.rm=TRUE), '
')
cat('Max: ', max(data_vec, na.rm=TRUE), '
')Apprends R avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 43
- Leçons
- 159
Questions Fréquemment Posées
La leçon « NA dans les calculs et les agrégations » est-elle gratuite ?
Oui — le texte complet de « NA dans les calculs et les agrégations » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « NA dans les calculs et les agrégations » ?
Contrôlez le comportement de NA dans mean(), sum() et les autres fonctions d’agrégation. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer R Academy ?
Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « NA dans les calculs et les agrégations » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon R Academy ?
Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Comprendre NA dans R
- Détecter et compter les valeurs manquantes
- Supprimer et remplacer les valeurs NA
- NA dans les calculs et les agrégations