Come risolvere in r: livello di fattore non valido, generato na


Un messaggio di avviso che potresti incontrare quando usi R è:

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

Questo avviso si verifica quando si tenta di aggiungere un valore a una variabile fattore in R che non esiste già come livello definito.

L’esempio seguente mostra come rispondere concretamente a questo avviso.

Come riprodurre l’avviso

Supponiamo di avere il seguente frame di dati in R:

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

#view data frame
df

  team points
1 to 99
2 to 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

Vediamo che la variabile squadra è un fattore a due livelli: “A” e “B”

Supponiamo ora di provare ad aggiungere una nuova riga alla fine del frame di dati utilizzando il valore “C” per 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

Riceviamo un messaggio di avviso perché il valore “C” non esiste già come livello di fattore per la variabile team .

È importante notare che questo è solo un messaggio di avviso e R aggiungerà comunque il ritorno a capo alla fine del frame di dati, ma utilizzerà il valore NA invece di “C”:

 #view updated data frame
df

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

Come evitare l’avviso

Per evitare l’avviso di livello fattore non valido , dobbiamo prima convertire la variabile fattore in una variabile carattere, quindi possiamo riconvertirla in una variabile fattore dopo aver aggiunto la nuova riga:

 #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 to 99
2 to 90
3 B 86
4 B 88
5 B 95
6 C 100

Tieni presente che riusciamo ad aggiungere con successo una nuova riga alla fine del frame di dati ed evitare un messaggio di avviso.

Possiamo anche verificare che il valore “C” è stato aggiunto come livello di fattore alla variabile team :

 #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" ...

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni in R:

Come risolvere in R: gli argomenti coinvolgono un numero diverso di righe
Come risolvere in R: errore nella selezione di argomenti inutilizzati
Come riparare in R: la sostituzione ha lunghezza zero

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *