Hablabamos en el capitulo anterior (2)Estructuras de datos, de los vectores. Seguimos esta guía con los factores.

Factores

Un factor es un tipo de vector especial. Se puede usar practicamente con cualquier tipo de variable, aunque el uso más normal es con las variables categóricas

Si recordamos las librerias incluidas en los paquetes de car y dataCar para tener datasets de práctica, en esta ocasión proponemos otra:

#instalar el paquete "InsuranceData" si no esta instalado
#cargar librería
library (insuranceData)

El uso de factores siempre es más recomendable que el uso de character (texto). R guarda la etiqueta de cada factor, y además los algoritmos pueden trabajar mejor con etiquetas que con el texto propiamente dicho (tambien se ahora memoria, entre otras cosas…)

Para crear un vector, por ejemplo la variable “sexo”, que nos dice ordenadamente “hombre”, “mujer”, “mujer”, “hombre”…

genero <- factor (c("H", "M", "M", "H"))
genero
## [1] H M M H
## Levels: H M

Vemos que hay una salida [1] con el listado de los valores asignados. Además vemos que hay dos niveles: H y M. es decir que hemos creado una variable factor con 2 niveles. Y si, pueden ser los nivieles que quieras. Y más importante todavía, a los niveles se les puede asignar importancia, es decir una preferencia.

Imaginemos que queremos catalogar algún dato por nivel de importancia:

# 1. Crear un vector de caracteres clásico
niveles_urgencia <- c("Media", "Alta", "Baja", "Alta", "Crítica")

# 2. Convertirlo en un vector con niveles ordenados por importancia
urgencia_ordenada <- factor(
  niveles_urgencia, 
  levels = c("Baja", "Media", "Alta", "Crítica"), 
  ordered = TRUE
)

urgencia_ordenada
## [1] Media   Alta    Baja    Alta    Crítica
## Levels: Baja < Media < Alta < Crítica

La salida nos muestra que el valor “Crítica” es el más importante de los cuatro niveles. Cuando haya que ordenar los niveles, funciones como ggplot, max () o min() respetarán esta jerarquía.

Cargamos ahora un dataset, para ver un ejemplo práctico:

data(dataCar)
View (dataCar)

# 2. Extraer el vector original (categorías de edad del coche: 1, 2, 3, 4), del dataframe 
# Por defecto R lo trata como un vector numérico común
antiguedad_original <- dataCar$veh_age

# 3. Transformarlo en un vector con niveles jerárquicos ordenados con etiquetas (nosotros vemos las etiquetas, y R trabaja con los niveles)

antiguedad_ordenada <- factor(
  antiguedad_original,
  levels = c(1, 2, 3, 4),
  labels = c("Nuevo", "Poco Usado", "Usado", "Antiguo"),
  ordered = TRUE
)

# 4. Inspeccionar los 10 primeros resultados
head (antiguedad_original, 10)
##  [1] 3 2 2 2 4 3 3 2 4 4
head(antiguedad_ordenada, 10)
##  [1] Usado      Poco Usado Poco Usado Poco Usado Antiguo    Usado     
##  [7] Usado      Poco Usado Antiguo    Antiguo   
## Levels: Nuevo < Poco Usado < Usado < Antiguo
# 3. Graficamos ambos para ver la diferencia
hist (antiguedad_original, main = "Sin Orden ", col = "tomato")

plot(antiguedad_ordenada, main = "Con Orden Jerárquico", col = "darkseagreen")

Si queremos que el nivel más importante sea “Nuevo”, cambiamos el orden de importancia de los factores.

antiguedad_ordenada <- factor(
  antiguedad_original,
  levels = c(4, 3, 2, 1),
  labels = c("Antiguo", "usado", "Poco Usado", "Nuevo"),
  ordered = TRUE)

  plot(antiguedad_ordenada, main = "Con Orden Jerárquico", col = "darkseagreen")

Y también apuntar que no es obligatorio ordenar los factores por importancia.