Parece haver uma diferença entre os níveis e os rótulos de um fator em R. Até agora, sempre pensei que os níveis eram o nome 'real' dos níveis dos fatores e os rótulos eram os nomes usados para a saída (como tabelas e gráficos) . Obviamente, este não é o caso, como mostra o exemplo a seguir:
df <- data.frame(v=c(1,2,3),f=c('a','b','c'))
str(df)
'data.frame': 3 obs. of 2 variables:
$ v: num 1 2 3
$ f: Factor w/ 3 levels "a","b","c": 1 2 3
df$f <- factor(df$f, levels=c('a','b','c'),
labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))
levels(df$f)
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"
Achei que os níveis ('a', 'b', 'c') ainda poderiam ser acessados durante o script, mas isso não funciona:
> df$f=='a'
[1] FALSE FALSE FALSE
Mas isso faz:
> df$f=='Treatment A: XYZ'
[1] TRUE FALSE FALSE
Então, minha pergunta consiste em duas partes:
Qual é a diferença entre níveis e rótulos?
É possível ter nomes diferentes para níveis de fator para script e saída?
Histórico: para scripts mais longos, a criação de scripts com níveis de fator curtos parece ser muito mais fácil. No entanto, para relatórios e gráficos, esses níveis curtos de fator podem não ser adequados e devem ser substituídos por nomes mais precisos.
levels
argumento, fornecerá os valores na entrada que devem corresponder aolabels
argumento. R mantém os rótulos (como o atributolevels
, e aí está a confusão) e armazena códigos inteiros internamente. Esses códigos inteiros não têm nada a ver com os valores originais, qualquer que seja o tipo. Eu acho que você me entendeu mal.Eu escrevi um pacote "lfactors" que permite que você se refira a níveis ou rótulos.
Observe que um lfactor requer que os níveis sejam numéricos para que não possam ser confundidos com os rótulos.
fonte