Subconjunto de um fator por níveis NA
-
14-11-2019 - |
Pergunta
Eu tenho uma factor R, com uma an nível.
set.seed(1)
x <- sample(c(1, 2, NA), 25, replace=TRUE)
x <- factor(x, exclude = NULL)
> x
[1] 1 2 2 <NA> 1 <NA> <NA> 2 2 1 1
[12] 1 <NA> 2 <NA> 2 <NA> <NA> 2 <NA> <NA> 1
[23] 2 1 1
Levels: 1 2 <NA>
Como faço subconjunto que o fator pelo <NA>
nível?Ambos os métodos tentei não funcionou.
> x[is.na(x)]
factor(0)
Levels: 1 2 <NA>
> x[x=='<NA>']
factor(0)
Levels: 1 2 <NA>
Solução
Surpreende-me que as suas tentativas para fazer isso não funcionar, mas isso parece:
x[is.na(levels(x)[x])]
Eu fiquei lá olhando str(x)
e vendo que ele é o níveis que são NA
, alocação de códigos:
str(x)
Factor w/ 3 levels "1","2",NA: 1 2 2 3 1 3 3 2 2 1 ...
Outras dicas
Como um acompanhamento para Ben:
str(x)
mostra-lhe o problema.Factores de são armazenados como inteiros internamente com uma "pesquisa" de algum tipo.Assim:
> all(is.na(x))
[1] FALSE
mas
> any(is.na(levels(x)))
[1] TRUE
e como ben mostrou, para imprimir os valores reais do vetor:
> levels(x)[x]
[1] "1" "2" "2" NA "1" NA NA "2" "2" "1" "1" "1" NA "2" NA "2" NA NA "2" NA NA "1" "2" "1" "1"
versus
> x
[1] 1 2 2 <NA> 1 <NA> <NA> 2 2 1 1 1 <NA> 2 <NA> 2 <NA> <NA> 2 <NA> <NA> 1 2 1 1
Levels: 1 2 <NA>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow