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
.
Quiero leer...
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