Remplacer NA par zéro en R

Gustavo du Mortier 30 janvier 2023
  1. Remplacer NA par Zéro dans les cadres de données R plus grands
  2. Remplacer NA par zéro dans un sous-ensemble de DataFrame R
Remplacer NA par zéro en R

Il existe un moyen simple de remplacer NA par des zéros dans un cadre de données dans R. Supposons que vous ayez un cadre de données appelé my_data. Pour remplacer toutes les valeurs NA par des zéros dans ce cadre de données, vous pouvez exécuter cette instruction.

my_data[is.na(my_data)] <- 0

Par exemple, si my_data a le contenu ci-dessous.

   C1  C2    C3  C4  C5
1   4   3  <NA>   3   7
2   9   8   ABC   5  10
3   1   1   XYZ   3   6
4  NA   4  <NA>   7  10
5   1   2   ZC1  NA   2

Lorsque vous exécutez my_data[is.na(my_data)] <- 0, le contenu du bloc de données se transforme en ceci.

   C1  C2    C3  C4  C5
1   4   3     0   3   7
2   9   8   ABC   5  10
3   1   1   XYZ   3   6
4   0   4     0   7  10
5   1   2   ZC1   0   2

Remplacer NA par Zéro dans les cadres de données R plus grands

La solution précédente utilise les réaffectations du sous-ensemble Base R, qui fonctionnent bien lorsque vous avez des trames de données relativement petites. Mais pour des ensembles de données plus importants, vous pourriez avoir besoin d’une alternative plus rapide, comme la nouvelle approche d’évaluation hybride mise en œuvre dans les versions récentes du paquet dplyr.

La nouvelle approche utilisée par le paquet dplyr reconnaît des expressions entières et utilise du code C++ pour les évaluer. De cette façon, vous pouvez obtenir des transformations jusqu’à 30% plus rapides lors du traitement de grandes trames de données.

Pour remplacer les valeurs NA par des zéros en utilisant le paquet dplyr, vous pouvez utiliser la fonction mutate avec le verbe _all scoped et la fonction replace au format purrr, comme dans l’exemple ci-dessous.

my_data <- mutate_all(my_data, ~replace(., is.na(.), 0))

L’utilisation de la notation purrr nous permet d’appliquer la fonction replace à chaque élément de la DataFrame.

Remplacer NA par zéro dans un sous-ensemble de DataFrame R

Au lieu du verbe _all dans la fonction mutate, vous pouvez utiliser le verbe _at pour restreindre l’action de remplacement à des colonnes spécifiques. Pour ce faire, vous pouvez inclure un vecteur avec les noms des colonnes où vous voulez que le remplacement soit appliqué. En utilisant le cadre de données précédent, si vous avez besoin de remplacer des valeurs NA uniquement dans les colonnes C1 et C4, vous pouvez utiliser la commande suivante :

my_data <- mutate_at(my_data, c("C1", "C4"), ~replace(., is.na(.), 0))

De cette façon, seules les valeurs NAs des colonnes C1 et C4 sont remplacées par 0, ce qui donne un cadre de données comme ci-dessous.

   C1  C2    C3  C4  C5
1   4   3  <NA>   3   7
2   9   8   ABC   5  10
3   1   1   XYZ   3   6
4   0   4  <NA>   7  10
5   1   2   ZC1   0   2

Dans l’exemple précédent, vous auriez pu vouloir remplacer NA par des zéros uniquement dans les colonnes numériques pour éviter d’inclure des valeurs zéros dans les colonnes alphanumériques comme C3. Si c’est le cas, au lieu de spécifier les colonnes où vous voulez appliquer le remplacement, vous pouvez utiliser la fonction mutate_if avec la condition is.numeric pour dire à R de remplacer NA par des zéros uniquement dans les colonnes numériques. Dans l’exemple suivant, vous pouvez trouver le code complet pour essayer cela, depuis l’installation du paquet dplyr et le remplissage du cadre de données jusqu’à la réalisation des remplacements et l’affichage des résultats.

install.packages("dplyr")
library(dplyr)
C1 <- c(4, 9, 1, NA, 1)
C2 <- c(3, 8, 1, 4, 2)
C3 <- c(NA, 'ABC', 'XYZ', NA, 'ZC1')
C4 <- c(3, 5, 3, 7, NA)
C5 <- c(7, 10, NA, 10, 2)
my_data <- data.frame(C1, C2, C3, C4, C5)
my_data <- mutate_if(my_data, is.numeric, ~replace(., is.na(.), 0))
my_data

Production :

   C1  C2    C3  C4  C5
1   4   3  <NA>   3   7
2   9   8   ABC   5  10
3   1   1   XYZ   3   0
4   0   4  <NA>   7  10
5   1   2   ZC1   0   2

Vous pouvez trouver plus d’informations sur la fonction mutate() et ses variantes dans la Documentation R.

Article connexe - R Data Frame