variable transformar recodificar ordenar numericas numerica factores factor estadistica convertir categoricas r label level r-factor

transformar - Confusión entre niveles de factores y etiquetas de factores



recodificar variables en r (2)

Escribí un paquete "lfactors" que le permite consultar niveles o etiquetas.

# packages install.packages("lfactors") require(lfactors) flips <- lfactor(c(0,1,1,0,0,1), levels=0:1, labels=c("Tails", "Heads")) # Tails can now be referred to as, "Tails" or 0 # These two lines return the same result flips == "Tails" #[1] TRUE FALSE FALSE TRUE TRUE FALSE flips == 0 #[1] TRUE FALSE FALSE TRUE TRUE FALSE

Tenga en cuenta que un lfactor requiere que los niveles sean numéricos para que no puedan confundirse con las etiquetas.

Parece que hay 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) . Obviamente, 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 los niveles (''a'', ''b'', ''c'') podrían ser accedidos de alguna manera al hacer scripts, 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 consiste de dos partes:

  • ¿Cuál es la diferencia entre niveles y etiquetas?

  • ¿Es posible tener diferentes nombres para niveles de factor para scripting y output?

Antecedentes: para secuencias de comandos más largas, la creación de scripts con niveles de factor cortos parece ser mucho más fácil. Sin embargo, para informes y parcelas, estos niveles de factores cortos pueden no ser adecuados y deben reemplazarse con nombres precisos.


Muy corto: los niveles son la entrada, las etiquetas son la salida en la función factor() . Un factor tiene solo un atributo de level , que se establece mediante el argumento labels en la función factor() . Esto es diferente del concepto de etiquetas en paquetes estadísticos como SPSS, y puede ser confuso al principio.

Qué haces en esta línea de código

df$f <- factor(df$f, levels=c(''a'',''b'',''c''), labels=c(''Treatment A: XYZ'',''Treatment B: YZX'',''Treatment C: ZYX''))

le está diciendo a R que hay un vector df$f

  • que quieres transformar en un factor,
  • en el cual los diferentes niveles están codificados como a, b y c
  • y para los que desea que los niveles se etiqueten como Tratamiento A, etc.

La función de factor buscará los valores a, byc, los convertirá en clases de factores numéricos y agregará los valores de etiqueta al atributo de level del factor. Este atributo se usa para convertir los valores numéricos internos a las etiquetas correctas. Pero como ve, no hay ningún atributo de label .

> df <- data.frame(v=c(1,2,3),f=c(''a'',''b'',''c'')) > attributes(df$f) $levels [1] "a" "b" "c" $class [1] "factor" > df$f <- factor(df$f, levels=c(''a'',''b'',''c''), + labels=c(''Treatment A: XYZ'',''Treatment B: YZX'',''Treatment C: ZYX'')) > attributes(df$f) $levels [1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX" $class [1] "factor"