Comment réparer dans R : niveau de facteur invalide, NA généré



Un message d’avertissement que vous pouvez rencontrer lors de l’utilisation de R est :

Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "C") :
  invalid factor level, NA generated

Cet avertissement se produit lorsque vous tentez d’ajouter une valeur à une variable de facteur dans R qui n’existe pas déjà en tant que niveau défini.

L’exemple suivant montre comment répondre à cet avertissement dans la pratique.

Comment reproduire l’avertissement

Supposons que nous ayons le bloc de données suivant dans R :

#create data frame
df <- data.frame(team=factor(c('A', 'A', 'B', 'B', 'B')),
                 points=c(99, 90, 86, 88, 95))

#view data frame
df

  team points
1    A     99
2    A     90
3    B     86
4    B     88
5    B     95

#view structure of data frame
str(df)

'data.frame':	5 obs. of  2 variables:
 $ team  : Factor w/ 2 levels "A","B": 1 1 2 2 2
 $ points: num  99 90 86 88 95

On voit que la variable équipe est un facteur à deux niveaux : « A » et « B »

Supposons maintenant que nous essayions d’ ajouter une nouvelle ligne à la fin du bloc de données en utilisant la valeur « C » pour team :

#add new row to end of data frame
df[nrow(df) + 1,] = c('C', 100)

Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "C") :
  invalid factor level, NA generated

Nous recevons un message d’avertissement car la valeur « C » n’existe pas déjà comme niveau de facteur pour la variable d’équipe .

Il est important de noter qu’il s’agit simplement d’un message d’avertissement et que R ajoutera toujours la nouvelle ligne à la fin du bloc de données, mais il utilisera la valeur NA au lieu de « C » :

#view updated data frame
df

  team points
1    A     99
2    A     90
3    B     86
4    B     88
5    B     95
6   NA    100

Comment éviter l’avertissement

Pour éviter l’avertissement de niveau de facteur non valide , nous devons d’abord convertir la variable de facteur en variable de caractère, puis nous pouvons la reconvertir en variable de facteur après avoir ajouté la nouvelle ligne :

#convert team variable to character
df$team <- as.character(df$team)

#add new row to end of data frame
df[nrow(df) + 1,] = c('C', 100)

#convert team variable back to factor
df$team <- as.factor(df$team)

#view updated data frame
df

  team points
1    A     99
2    A     90
3    B     86
4    B     88
5    B     95
6    C    100

Notez que nous parvenons à ajouter avec succès une nouvelle ligne à la fin du bloc de données et que nous évitons un message d’avertissement.

On peut également vérifier que la valeur « C » a été ajoutée comme niveau de facteur à la variable équipe :

#view structure of updated data frame
str(df)

'data.frame':	6 obs. of  2 variables:
 $ team  : Factor w/ 3 levels "A","B","C": 1 1 2 2 2 3
 $ points: chr  "99" "90" "86" "88" ...

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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *