Remplacer NA par zéro en R
- Remplacer NA par Zéro dans les cadres de données R plus grands
- Remplacer NA par zéro dans un sous-ensemble de DataFrame 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
- Supprimer plusieurs colonnes dans R
- Créer un grand bloc de données dans R
- Fusionner deux trames de données avec un nombre différent de lignes dans R
- Supprimer les lignes en double par colonne dans R
- Trouver les valeurs absolues maximales par ligne dans le bloc de données dans R
- Nombre d'observations en R