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 trasformandoNA
in un livello extra (in modo che i valoriNA
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