Factor en R

- ¿Qué es un factor en R?
- La función factor
- Convertir carácter en factor en R
- Convertir variable numérica en factor
- Cambiar las etiquetas de los niveles de un factor en R
- Diferencia entre los argumentos ‘levels’ y ‘labels’
- Reordenar factores en R
- Convertir factor en variable numérica
- Convertir factor de R en string
- Convertir un factor de R en clase date
Los factores en R se utilizan para representar datos categóricos. Se puede pensar en ellos como vectores en los que cada elemento tiene una etiqueta asociada. Ten en cuenta que es preferible utilizar factores con etiquetas que vectores enteros para indicar categorías, ya que las etiquetas son autodescriptivas. En esta lección aprenderás todo sobre cómo crear un factor en R.
¿Qué es un factor en R?
Un factor en R es una estructura de datos utilizada para representar un vector como datos categóricos. El objeto factor toma un número acotado de diferentes valores llamados niveles. Los factores son muy útiles cuando se trabaja con columnas de caracteres de data frames, para crear gráficos de barras y crear resúmenes estadísticos de variables categóricas.
La función factor
La función factor
permite crear factores en R. En el siguiente bloque se muestran los argumentos de la función con una descripción resumida.
Puedes obtener una descripción más detallada de la función y sus argumentos ejecutando ?factor
o help(factor)
.
Convertir carácter en factor en R
Ahora revisaremos un ejemplo donde nuestro input es un vector de caracteres. Supón que tienes un vector que contiene los días de la semana en los que sucedió algún evento. Puedes convertir el vector de caracteres a factor utilizando la función factor
.
Por defecto, al convertir un vector de caracteres en factor los niveles se ordenan alfabéticamente.
Si quieres conservar el orden de los niveles tal y como aparecen en los datos de entrada, especifica en el argumento levels
lo siguiente:
Cabe destacar que se pueden devolver y convertir los niveles de los factores en caracteres con la función levels
.
Convertir variable numérica en factor
Supongamos ahora que has registrado la ciudad de nacimiento de seis personas con la siguiente codificación:
- 1: Dublin.
- 2: Londres,
- 3: Sofia.
- 4: Pontevedra.
Por lo tanto, tendrás datos almacenados en un vector numérico como los siguientes:
Ahora puedes llamar a la función factor
para convertir y obtener los datos categorizados para su posterior análisis.
La salida tendrá la siguiente estructura:
Cambiar las etiquetas de los niveles de un factor en R
Si el vector de entrada es numérico como sucedió en la sección anterior, la etiqueta correspondiente (la ciudad) no queda reflejada. Para resolver este problema, puedes almacenar los datos en un objeto de tipo factor utilizando la función factor
e indicar las etiquetas correspondientes de los niveles en el argumento labels
y así cambiar el nombre de los niveles del factor.
En el bloque de código anterior puedes ver el resultado final. Como puedes observar, ahora los datos se clasifican usando las ciudades como etiquetas.
Diferencia entre los argumentos ‘levels’ y ‘labels’
Es común confundirse entre los argumentos labels
y levels
de la función factor
en R. Considera el siguiente vector con un único grupo y crea un factor a partir de él con argumentos predeterminados:
Ahora bien, por un lado, el argumento labels
permite modificar los nombres de los niveles de factores. Por lo tanto, el argumento labels
está relacionado con la salida. Ten en cuenta que la longitud del vector pasado al argumento debe ser de la misma longitud que la cantidad de grupos únicos del vector de entrada.
Por otro lado, el argumento levels
está relacionado con la entrada. Este argumento permite especificar cómo están codificados los niveles que se quieren tratar. En consecuencia, este argumento permite agregar nuevos niveles al factor:
Ten en cuenta que debes especificar al menos los mismos nombres de los grupos que forman el vector de entrada o la salida no será la esperada. Por ejemplo, si en el argumento levels
escribimos “f” en lugar de “femenino” sucede lo que sigue:
Reordenar factores en R
Quizás te estés preguntando cómo cambiar el orden de los niveles (esto puede ser importante, por ejemplo, en algunas representaciones gráficas). El orden de los niveles de los factores se puede cambiar de varias maneras, descritas en las subsecciones siguientes.
Orden personalizado
En caso de que quieras crear un orden personalizado para los niveles, deberás crear un vector con el order que prefieres y pasarlo al argumento labels
.
También puedes ordenar alfabéticamente los niveles del factor utilizando la función sort
:
La función reorder
La función reorder
está diseñada para ordenar los niveles de un factor en función de una medida estadística de otra variable. Considera un data frame donde cada fila representa a un individuo, la columna ‘ciudad’ representa la ciudad donde nació y la columna ‘salario’ representa su salario anual real en miles de euros.
Puedes reordenar el factor en función del salario medio de las personas utilizando la función reorder
de la siguiente manera:
Revertir el orden de los niveles
Recuerda que puedes usar la función levels
para obtener los niveles de un factor. En este momento, los niveles del factor son los siguientes:
Puedes revertir el orden de los niveles con la función rev
:
La función relevel
Además, si quieres cambiar solo una observación y ponerla en primer lugar, puedes usar la función relevel
. Por ejemplo, si quieres que ‘Londres’ sea el primer nivel y mantener el orden de los demás, puede usar:
En las siguientes secciones revisaremos cómo convertir factores a otros tipos de datos de la manera más eficiente posible.
Convertir factor en variable numérica
Si tienes un factor en R que quieres convertir a tipo numérico, la forma más eficiente se ilustra en el siguiente bloque de código, utilizando las funciones as.numeric
y levels
para indexar los niveles por el índice del factor correspondiente.
Si quieres convertir el factor al vector original (con el mismo orden) nunca uses as.numeric(mi_factor)
, ya que devolverá un vector numérico diferente al deseado.
Convertir factor de R en string
Es posible que necesites convertir un factor en una cadena de caracteres. Para ello, puedes utilizar la función as.character
.
Nótese que si utilizas la función levels
, la salida devolverá un vector de caracteres con las cadenas ordenadas alfabéticamente.
Convertir un factor de R en clase date
Además, si necesitas convertir un objeto de tipo factor a fecha, puede usar la función as.Date
, especificando en el argumento format
el formato de fecha con el que estás trabajando.