Parece haber una diferencia entre los niveles y las etiquetas de un factor en R. Hasta ahora, siempre pensé que los niveles eran el nombre 'real' de los niveles de los factores, y las etiquetas eran los nombres utilizados para la salida (como tablas y gráficos) . Evidentemente, este no es el caso, como muestra el siguiente ejemplo:
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"
Pensé que todavía se podía acceder a los niveles ('a', 'b', 'c') al realizar un script, pero esto no funciona:
> df$f=='a'
[1] FALSE FALSE FALSE
Pero esto hace:
> df$f=='Treatment A: XYZ'
[1] TRUE FALSE FALSE
Entonces, mi pregunta consta de dos partes:
¿Cuál es la diferencia entre niveles y etiquetas?
¿Es posible tener diferentes nombres para los niveles de factores para la creación de scripts y la salida?
Antecedentes: para scripts más largos, la creación de scripts con niveles de factor cortos parece ser mucho más fácil. Sin embargo, para informes y gráficos, estos niveles de factor cortos pueden no ser adecuados y deben reemplazarse por nombres más precisos.
levels
argumento, proporciona los valores en la entrada que deben coincidir con ellabels
argumento. R mantiene las etiquetas (como el atributolevels
, y existe la confusión) y almacena códigos enteros internamente. Estos códigos enteros no tienen nada que ver con los valores originales, sea del tipo que sean. Creo que me has malentendido.Escribí un paquete "lfactors" que te permite hacer referencia a niveles o etiquetas.
Tenga en cuenta que un factor requiere que los niveles sean numéricos para que no se puedan confundir con las etiquetas.
fuente