Factores en R

Factores en R

El término factor se refiere a un tipo de datos estadístico que almacena variables categóricas o cualitativas. Por definición, las variables categóricas cuentan con un número limitado de factores (o categorías). Por ejemplo, la variable sexo solo tiene dos factores: hombre o mujer.

Creando factores con la función factor()

# Tenemos un vector
sexo <- c("hombre", "mujer", "mujer", "mujer", "hombre", "mujer")

# Vemos que ese vector tiene dos factores, por lo que lo convertimos en factorial
factor(sexo)
## [1] hombre mujer  mujer  mujer  hombre mujer 
## Levels: hombre mujer

Tipos de variables categóricas

Podemos distinguir 2 tipos de variables categóricas:

  • Variables categóricas nominales. No implica ningún orden. Por ejemplo el sexo.
  • Variables categóricas ordinales. Implica orden o gradación. Por ejemplo, Bajo, Medio, Alto.

Las variables nominales son las que hemos visto ya en el ejemplo sexo, donde no hay ningún orden. Vamos a ver ahora cómo añadir las variables categóricas ordinales.

# Veamos cómo categorizar el peso de niños
peso <- c("Alto", "Bajo", "Bajo", "Medio", "Bajo", "Medio", "Alto")

# Lo convertimos en categórico añadiendo que hay un orden
factor_peso <- factor(peso, order = TRUE, levels = c("Bajo", "Medio", "Alto"))

Como podemos ver, al introducir el atributo levels() dentro de la función factor(), podemos indicar el orden correcto de nuestra variable categórica nominal.

# Al ver el objeto "factor_peso", vemos que las categorías ya están ordenadas con el símbolo "<"
factor_peso
## [1] Alto  Bajo  Bajo  Medio Bajo  Medio Alto 
## Levels: Bajo < Medio < Alto

Conocer las categorías y cambiar sus nombres con levels()

Si queremos conocer las categorías o factores de una variable categórica, tenemos que usar la función levels().

# Hemos hecho una encuesta y hemos registrado el sexo con "H" hombre y "M" mujer.
encuesta <- c("M", "M", "H", "H", "M", "H")
encuestafac <- factor(encuesta) # convertimos "encuesta" en factorial
levels(encuestafac) # vemos las categorías que tiene
## [1] "H" "M"
# Cambiamos el nombre de las categorías siguiendo el orden que sale en levels(encuesta)
levels(encuestafac) <- c("Hombre", "Mujer")
levels(encuestafac) # comprobamos el cambio de nombre
## [1] "Hombre" "Mujer"

Resumiendo una variable categórica con summary()

summary(encuesta)
##    Length     Class      Mode 
##         6 character character
summary(encuestafac)
## Hombre  Mujer 
##      3      3
summary(factor_peso)
##  Bajo Medio  Alto 
##     3     2     2

Comparando factores ordinales con operadores

# Creamos el vector velocidad
velocidad <- c("medio", "lento", "lento", "medio", "rápido")
factor_velocidad <- factor(velocidad, ordered = TRUE, levels = c("lento", "medio", "rápido"))

# Seleccionamos al segundo
da2 <- factor_velocidad[2]

# Seleccionamos al quinto
da5 <- factor_velocidad[5]

# ¿Es el 2 más rápido que el 5?
da2 > da5
## [1] FALSE