Como posso manter NA quando altero os níveis
Eu construo um vetor de fatores contendo NA.
my_vec <- factor(c(NA,"a","b"),exclude=NULL)
levels(my_vec)
# [1] "a" "b" NA
Eu mudo um desses níveis.
levels(my_vec)[levels(my_vec) == "b"] <- "c"
NA desaparece.
levels(my_vec)
# [1] "a" "c"
Como posso mantê-lo?
EDITAR
O @rawr deu uma boa solução que pode funcionar na maioria das vezes, funciona para o meu exemplo específico anterior, mas não para o que mostrarei abaixo. O Hack-R tinha uma opção pragmática usando o addNA, eu poderia fazê-lo funcionar com isso. mas eu prefiro uma solução totalmente geral
Veja este problema generalizado
my_vec <- factor(c(NA,"a","b1","b2"),levels = c("a",NA,"b1","b2"),exclude=NULL)
levels(my_vec)
[1] "a" NA "b1" "b2"
levels(my_vec)[levels(my_vec) %in% c("b1","b2")] <- "c"
levels(my_vec)
[1] "a" "c" # NA disppeared
solução @ @ rawr:
my_vec <- factor(c(NA,"a","b1","b2"),levels = c("a",NA,"b1","b2"),exclude=NULL)
levels(my_vec)
[1] "a" NA "b1" "b2"
attr(my_vec, 'levels')[levels(my_vec) %in% c("b1","b2")] <- "c"
levels(my_vec)
droplevels(my_vec)
[1] "a" NA "c" "c" # c is duplicated
@ Solução do Hack-R:
my_vec <- factor(c(NA,"a","b1","b2"),levels = c("a",NA,"b1","b2"),exclude=NULL)
levels(my_vec)
[1] "a" NA "b1" "b2"
levels(my_vec)[levels(my_vec) %in% c("b1","b2")] <- "c"
my_vec <- addNA(my_vec)
levels(my_vec)
[1] "a" "c" NA # NA is in the end
eu querolevels(my_vec) == c("a",NA,"c")