Comment réparer dans R : les valeurs manquantes ne sont pas autorisées dans les affectations indicées
Un message d’erreur que vous pouvez rencontrer lors de l’utilisation de R est :
Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, : missing values are not allowed in subscripted assignments of data frames
Cette erreur se produit généralement lorsque vous tentez d’attribuer des valeurs dans une colonne à l’aide de valeurs d’une autre colonne, mais que des valeurs NA sont présentes.
L’exemple suivant montre comment résoudre cette erreur dans la pratique.
Comment reproduire l’erreur
Supposons que nous créions le bloc de données suivant dans R :
#create data frame
df <- data.frame(A=c(3, 4, 4, NA, 5, 8, 5, 9),
B=c(12, 13, 7, 7, 12, 11, 15, 7))
#view data frame
df
A B
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 12
6 8 11
7 5 15
8 9 7
Supposons maintenant que nous essayions d’attribuer une valeur de 10 à chaque ligne de la colonne B où la valeur correspondante dans la colonne A est égale à 5 :
#attempt to assign column B a value of 10 where A is equal to 5
df[df$A == 5, ]$B <- 10
Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, :
missing values are not allowed in subscripted assignments of data frames
Nous recevons une erreur car il y a des valeurs NA dans la colonne A et le message d’erreur nous indique explicitement que les valeurs manquantes ne sont pas autorisées dans les affectations en indice des trames de données .
Comment éviter l’erreur
Il existe deux manières d’éviter cette erreur.
1. Utilisez l’opérateur %in%
Une façon d’éviter cette erreur consiste à utiliser l’opérateur %in% lors de l’exécution de l’affectation :
#assign column B a value of 10 where A is equal to 5 df[df$A %in% 5,]$B <- 10 #view updated data frame df A B 1 3 12 2 4 13 3 4 7 4 NA 7 5 5 10 6 8 11 7 5 10 8 9 7
Notez qu’une valeur de 10 a été attribuée à chaque ligne de la colonne B où la valeur correspondante dans la colonne A est égale à 5 et nous ne recevons aucune erreur.
2. Utilisez is.na()
Une autre façon d’éviter cette erreur consiste à utiliser la fonction is.na() lors de l’exécution de l’affectation :
#assign column B a value of 10 where A is equal to 5
df[!is.na(df$A) & df$A == 5, ]$B <- 10
#view updated data frame
df
A B
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 10
6 8 11
7 5 10
8 9 7
Encore une fois, nous pouvons attribuer une valeur de 10 à chaque ligne de la colonne B où la valeur correspondante dans la colonne A est égale à 5 et nous ne recevons aucune erreur.
Ressources additionnelles
Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes dans R :
Comment réparer dans R : les arguments impliquent un nombre de lignes différent
Comment réparer dans R : erreur dans la sélection des arguments inutilisés
Comment réparer dans R : le remplacement a une longueur nulle