Factores en R: qué son y cómo trabajar con ellos

El término factor se refiere a un tipo de datos estadístico que almacena variables categóricas o cualitativas. Los factores en R son, por lo tanto, las variables categóricas que empleamos. Por definición, las variables categóricas cuentan con un número limitado de factores (o categorías). Por ejemplo, la variable sexo solo tendría dos factores: hombre o mujer. Pero estos factores o categorías también pueden ser numéricos, como el número de cilindros del motor de un vehículo. Incluso, se podrían codificar los dos factores de sexo como 0 y 1.

Factores en R: qué son y cómo trabajar con ellos

Creando factores en R con la función factor()

Para convertir una variable cualitativa o categórica en factorial, tenemos que emplear la función factor(). Si generamos un vector con 6 elementos que indiquen el sexo de 6 personas, es importante convertirlo en factorial porque así R evalúa el número de factores que hay (2) en vez de tratarlos de modo independiente.

# 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

Como se ha visto, la ejecución de factor(sexo) nos devuelve un resumen de los factores del vector así como los factores (Levels) que ha identificado. En este caso, los factores han sido dos: hombre y mujer.

Tipos de variables categóricas o factoriales en R

Podemos distinguir 2 tipos de variables factoriales en R:

  • Variables categóricas nominales. No implica ningún orden. Por ejemplo el sexo.
  • Variables categóricas ordinales. Implica orden o gradación. Por ejemplo, la altura de una persona podría categorizarse, en este orden, como 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. Para ello hay que añadir dos argumentos dentro de factor() que indiquen que hay un orden en los factores y cuál es es ese orden. Cada uno de los dos puntos anteriores se hace con los argumentos ordered y levels, respectivamente.

# 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, ordered = 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 los factores en R y cambiar sus nombres

Si queremos conocer las categorías o factores presentes en 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"

Ahora bien, si deseamos cambiar el nombre de las categorías tenemos que generar un nuevo vector con los nuevos nombres. Es muy importante que al crear el nuevo vector, los nuevos nombres tienen que estar escritos en el mismo orden. Es decir, H y M tienen que escribirse como Hombre y Mujer, y no al revés.

# 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"

También podemos ver cómo poder hacer el cambio de nombres empleando el argumentos labels, como viene explicado en esta entrada.

Resumiendo una variable categórica

Si ejecutamos summary() sobre un objeto que no tiene definidos sus elementos como factores, nos da simplemente el tamaño y el tipo de los elementos. Así pasa por ejemplo con el objeto encuesta, que no discrimina por factores porque sencillamente éstos no están definidos.

summary(encuesta)
   Length     Class      Mode 
        6 character character

Ahora bien, si en vez de sobre encuesta se ejecuta summary() sobre encuestafac o factor_peso, el resultado nos identifica los factores correctamente y nos devuelve un resumen en base a esas categorías.

summary(encuestafac)
Hombre  Mujer 
     3      3
summary(factor_peso)
 Bajo Medio  Alto 
    3     2     2

Comparando factores ordinales con operadores

Cuando insertamos un orden en particular en un conjunto de factores, R los ordena de menor a mayor. Este orden permite emplear los operadores matemáticos para compararlos entre ellos. Empleando el modo de seleccionar objetos dentro de un vector, podemos verlo en acción.

# 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 el segundo elemento
da2 <- factor_velocidad[2]

# Seleccionamos el quinto elemento
da5 <- factor_velocidad[5]

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

Deja un comentario