Converti NA in un livello di fattore

Ho un vettore con valori di NA che vorrei sostituire con un nuovo livello di fattore NA .

 a = as.factor(as.character(c(1, 1, 2, 2, 3, NA))) a [1] 1 1 2 2 3  Levels: 1 2 3 

Funziona, ma sembra un modo strano per farlo.

 a = as.factor(ifelse(is.na(a), "NA", a)) class(a) [1] "factor" 

Questo è l’output atteso:

 a [1] 1 1 2 2 3 NA Levels: 1 2 3 NA 

    Puoi anche usare addNA() .

     x <- c(1, 1, 2, 2, 3, NA) addNA(x) # [1] 1 1 2 2 3  # Levels: 1 2 3  

    Questa è fondamentalmente una funzione di convenienza per il factoring con exclude = NULL . help(factor)

    addNA modifica un fattore trasformando NA in un livello extra (in modo che i valori NA vengano conteggiati nelle tabelle, ad esempio).

    Quindi un altro motivo per cui è bello è che se hai già un fattore f , puoi usare addNA() per aggiungere rapidamente NA come livello di fattore senza cambiare f . Come menzionato nella documentazione, questo è utile per le tabelle. Legge anche bene.

    Imposta l’argomento exclude su NULL per includere NAs come livelli (e usa factor invece di as.factor. Fa la stessa cosa e ha più argomenti da impostare):

     a = factor(as.character(c(1, 1, 2, 2, 3, NA)), exclude = NULL) > a [1] 1 1 2 2 3  Levels: 1 2 3  

    Puoi aggiungere NA come livello e cambiare il nome del livello in qualcosa di più esplicito di usando fct_explicit_na dai pacchetti forzati .

     library(forcats) 

    Di default ottieni il nuovo livello come (Missing) :

     fct_explicit_na(a) [1] 1 1 2 2 3 (Missing) Levels: 1 2 3 (Missing) 

    Puoi impostarlo su qualcos’altro:

     fct_explicit_na(a, "unknown") [1] 1 1 2 2 3 unknown Levels: 1 2 3 unknown