0Pricing
R Academy · Leçon

Supprimer et remplacer les valeurs NA

Appliquez na.omit(), complete.cases() et des stratégies de remplacement manuel.

Supprimer et remplacer les valeurs NA est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.

Stratégies de traitement des NA

Il existe trois stratégies principales pour traiter les valeurs manquantes : les supprimer, les remplacer par une constante ou les imputer à l’aide d’une estimation statistique. La bonne approche dépend de vos données et des objectifs de votre analyse.

data_vals <- c(88, NA, 72, NA, 91, 65, NA, 78)
cat('Original data:', data_vals, '
')
cat('NA count:', sum(is.na(data_vals)), '
')

# Strategy 1: remove
cat('After removal:', data_vals[!is.na(data_vals)], '
')
# Strategy 2: replace with 0
replaced <- data_vals; replaced[is.na(replaced)] <- 0
cat('Replaced with 0:', replaced, '
')

Supprimer les NA avec x[!is.na(x)]

La manière la plus directe de supprimer les NA d’un vecteur consiste à utiliser une sélection logique : x[!is.na(x)]. Cela conserve uniquement les éléments pour lesquels is.na(x) vaut FALSE (c’est-à-dire les valeurs présentes).

response_times <- c(1.2, NA, 0.9, 1.5, NA, 1.1, 0.8, NA, 1.3)
cat('With NAs:    ', response_times, '
')
cat('Length:', length(response_times), '
')

clean_times <- response_times[!is.na(response_times)]
cat('Without NAs: ', clean_times, '
')
cat('Length:', length(clean_times), '
')
cat('Mean after removal:', round(mean(clean_times), 3), '
')

na.omit() pour les vecteurs

na.omit(x) supprime les valeurs NA d’un vecteur. Cette fonction est équivalente à x[!is.na(x)], mais elle enregistre également les positions des NA supprimés dans un attribut appelé 'na.action'.

scores <- c(88, NA, 72, NA, 91, 65, NA, 78)
clean_scores <- na.omit(scores)
cat('Original:', scores, '
')
cat('Cleaned: ', as.numeric(clean_scores), '
')

# na.omit records which positions were removed
removed_at <- attr(clean_scores, 'na.action')
cat('NAs were at positions:', removed_at, '
')

na.omit() pour les data frames

Appliqué à un data frame, na.omit(df) supprime toute ligne contenant au moins un NA. On parle de suppression par observation complète : l’observation entière est supprimée.

df <- data.frame(
  name   = c('Alice', 'Bob', 'Carol', 'Dave', 'Eve'),
  age    = c(28, NA, 32, 45, 29),
  salary = c(55000, 72000, NA, 90000, 61000)
)
cat('Original rows:', nrow(df), '
')
df_clean <- na.omit(df)
cat('After na.omit rows:', nrow(df_clean), '
')
print(df_clean)

complete.cases() — complétude ligne par ligne

complete.cases(df) renvoie un vecteur logique contenant TRUE pour les lignes qui ne comportent aucune valeur manquante. Utilisez-le pour filtrer les lignes complètes ou identifier les lignes incomplètes.

df <- data.frame(
  id  = 1:5,
  x   = c(1, NA, 3, 4, NA),
  y   = c(NA, 2, 3, NA, 5)
)
cc <- complete.cases(df)
cat('Complete cases (T/F):', cc, '
')
cat('Complete rows:
')
print(df[cc, ])
cat('Number complete:', sum(cc), '
')

Remplacer NA par une constante

Pour remplacer NA par une valeur précise, utilisez une affectation logique : x[is.na(x)] <- value. Parmi les remplacements courants figurent 0 pour les décomptes, la moyenne ou la médiane pour les données continues, ou une étiquette de catégorie pour les facteurs.

# Replace with 0
counts <- c(5, NA, 3, NA, 8, 1, NA, 4)
counts_filled <- counts
counts_filled[is.na(counts_filled)] <- 0
cat('Original:', counts, '
')
cat('Filled:  ', counts_filled, '
')

# Replace with mean of present values
mean_val <- mean(counts, na.rm = TRUE)
counts_mean <- counts
counts_mean[is.na(counts_mean)] <- mean_val
cat('Mean-filled:', round(counts_mean, 1), '
')

replace() — remplacement fonctionnel

replace(x, list, values) renvoie une copie modifiée de x, dans laquelle les éléments situés aux positions list sont remplacés par values. Il s’agit de l’approche fonctionnelle (sans modification de l’original) du remplacement.

temps <- c(22.1, NA, 19.8, NA, 25.1)
cat('Original:', temps, '
')

# Replace NAs with the median
median_temp <- median(temps, na.rm = TRUE)
filled_temps <- replace(temps, is.na(temps), median_temp)
cat('Filled:  ', filled_temps, '
')
cat('Original unchanged:', temps, '
')  # original not modified

Propagation vers l’avant (dernière observation reportée)

Une stratégie d’imputation courante est la propagation vers l’avant (LOCF) : remplacer chaque NA par la dernière valeur connue. Cette méthode s’utilise pour les séries temporelles dont les mesures restent valables jusqu’à leur mise à jour.

# Manual forward-fill
readings <- c(10, NA, NA, 13, NA, 15, NA, NA, 18)
filled <- readings
for (i in seq_along(filled)) {
  if (is.na(filled[i]) && i > 1) {
    filled[i] <- filled[i - 1]
  }
}
cat('Original:     ', readings, '
')
cat('Forward-filled:', filled, '
')

Remplacer NA dans les vecteurs de chaînes

Les mêmes techniques fonctionnent avec les vecteurs de chaînes. Dans l’analyse de données catégorielles, il est courant de remplacer les NA des chaînes par une étiquette telle que 'Unknown' ou 'Missing'.

categories <- c('A', NA, 'B', 'A', NA, 'C', NA, 'B')
cat('Original:', categories, '
')

# Replace with 'Unknown'
filled_cat <- replace(categories, is.na(categories), 'Unknown')
cat('Filled:  ', filled_cat, '
')

# Count each category
cat('Table:
')
print(table(filled_cat))

Stratégie de remplacement conditionnel

Vous pouvez parfois vouloir utiliser différentes valeurs de remplacement selon la valeur d’une autre colonne. Utilisez l’indexation avec des conditions pour appliquer des remplacements ciblés.

# Scores: replace NA with group mean
group   <- c('A', 'A', 'B', 'B', 'A', 'B')
scores  <- c(85, NA, 72, NA, 90, 78)

mean_a <- mean(scores[group == 'A'], na.rm = TRUE)
mean_b <- mean(scores[group == 'B'], na.rm = TRUE)

imputed <- scores
imputed[is.na(imputed) & group == 'A'] <- mean_a
imputed[is.na(imputed) & group == 'B'] <- mean_b

cat('Original:', scores, '
')
cat('Imputed: ', imputed, '
')

Résumé des méthodes de suppression des NA

Résumé des outils de traitement des NA dans R :

  • x[!is.na(x)] — supprimer les NA d’un vecteur
  • na.omit(x) — supprimer les NA (enregistre également leurs positions)
  • na.omit(df) — supprimer les lignes incomplètes d’un data frame
  • complete.cases(df) — vecteur logique : TRUE pour les lignes complètes
  • x[is.na(x)] <- val — remplacer les NA directement
  • replace(x, is.na(x), val) — remplacement fonctionnel (renvoie une copie)
v <- c(5, NA, 8, NA, 3, 7)
cat('Remove:          ', v[!is.na(v)], '
')
cat('Replace with 0:  ', replace(v, is.na(v), 0), '
')
cat('Replace with mean:', replace(v, is.na(v), mean(v, na.rm=TRUE)), '
')

Vérification rapide

Que renvoie na.omit(c(1, NA, 3, NA, 5)) ?

Récapitulatif : supprimer et remplacer les NA

Excellent travail ! Voici les points essentiels de cette leçon :

  • x[!is.na(x)] et na.omit(x) suppriment les NA d’un vecteur
  • na.omit(df) effectue une suppression par observation complète (supprime toute ligne contenant un NA)
  • complete.cases(df) identifie les lignes qui ne contiennent aucune valeur manquante
  • x[is.na(x)] <- value remplace les NA directement
  • replace(x, is.na(x), value) renvoie une copie modifiée sans changer l’original
  • Choisissez votre stratégie selon la raison pour laquelle les données sont manquantes et la quantité de données manquantes
# Complete workflow: audit, then handle
data_raw <- c(82, NA, 75, NA, 91, 68, NA, 79)
cat('Missing:', sum(is.na(data_raw)), '/', length(data_raw), '
')

# Replace with median (robust to outliers)
imputed <- replace(data_raw, is.na(data_raw), median(data_raw, na.rm=TRUE))
cat('Before imputation mean:', round(mean(data_raw, na.rm=TRUE), 2), '
')
cat('After imputation mean: ', round(mean(imputed), 2), '
')

Questions Fréquemment Posées

La leçon « Supprimer et remplacer les valeurs NA » est-elle gratuite ?

Oui — le texte complet de « Supprimer et remplacer les valeurs NA » 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 « Supprimer et remplacer les valeurs NA » ?

Appliquez na.omit(), complete.cases() et des stratégies de remplacement manuel. 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 3 sur 4.

Combien de temps prend la leçon « Supprimer et remplacer les valeurs NA » ?

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

  1. Comprendre NA dans R
  2. Détecter et compter les valeurs manquantes
  3. Supprimer et remplacer les valeurs NA
  4. NA dans les calculs et les agrégations
← Retour à R Academy