El paquete Tidyverse (III): forcats y purrr

En nuestra serie sobre Tidyverse, hemos cubierto herramientas como readr, dplyr, y tidyr. Hoy, nos adentraremos en dos paquetes más: forcats para el manejo de factores y purrr para la programación funcional. Acompáñame a descubrir cómo estas herramientas pueden facilitar y enriquecer nuestro trabajo con datos en R.

Manejo de Factores con forcats

Los factores son esenciales en R para manejar datos categóricos. forcats ofrece funciones intuitivas para trabajar con ellos.

Ejemplo Práctico con forcats

Supongamos que tenemos un conjunto de datos con categorías y valores asociados:

library(dplyr)
library(forcats)

# Crear un conjunto de datos de ejemplo
set.seed(123)
data <- tibble(
  categoria = sample(c("A", "B", "C", "D"), 100, replace = TRUE),
  valor = rnorm(100)
)
  1. Reordenar Factores: Queremos reordenar categoria basándonos en la media de valor:
   data <- data %>%
     mutate(categoria = fct_reorder(categoria, valor, .fun = mean))
  1. Cambiar Niveles de Factores: Movemos el nivel ‘C’ al frente:
   data <- data %>%
     mutate(categoria = fct_relevel(categoria, "C"))
  1. Colapsar Niveles: Unimos ‘B’ y ‘C’ en una nueva categoría ‘Otros’:
   data <- data %>%
     mutate(categoria = fct_collapse(categoria, Otros = c("B", "C")))

Programación Funcional con purrr

purrr mejora la programación funcional en R, facilitando la manipulación de listas y vectores.

Pero antes de mostrar ejemplos con purrr, veamos dos funciones muy útiles en R para la generación de números aleatorios, runif y rnorm.

runif

La función runif se utiliza para generar números aleatorios uniformemente distribuidos. Esto significa que cada número dentro del rango especificado tiene la misma probabilidad de ser seleccionado. La sintaxis básica de runif es la siguiente:

runif(n, min = 0, max = 1)

Donde:

  • n es el número de observaciones que quieres generar.
  • min y max son los límites inferior y superior del rango de números aleatorios. Por defecto, estos valores son 0 y 1, respectivamente.

Por ejemplo, si quieres generar 5 números aleatorios entre 0 y 10, usarías:

runif(5, min = 0, max = 10)

rnorm

Por otro lado, rnorm se utiliza para generar números aleatorios que siguen una distribución normal (o gaussiana). La distribución normal está caracterizada por su media (el centro de la distribución) y su desviación estándar (que determina qué tan dispersos están los datos alrededor de la media). La sintaxis básica de rnorm es:

rnorm(n, mean = 0, sd = 1)

Donde:

  • n es el número de observaciones a generar.
  • mean es la media de la distribución normal.
  • sd es la desviación estándar de la distribución.

Por ejemplo, para generar 5 números aleatorios con una media de 50 y una desviación estándar de 10, usarías:

rnorm(5, mean = 50, sd = 10)

Usos en Simulaciones y Análisis de Datos

Tanto runif como rnorm son extremadamente útiles en estadísticas y ciencia de datos, especialmente para simulaciones. Por ejemplo, runif puede ser usado para simular procesos que requieren una distribución uniforme, como la generación de números para loterías o para simular procesos de selección aleatoria.

rnorm, por su parte, es crucial en situaciones donde la distribución normal es una suposición válida, lo cual es común en muchos fenómenos naturales y sociales. Se utiliza en la generación de datos de prueba, en el análisis de Monte Carlo, y en muchas otras áreas donde se modelan fenómenos que siguen una distribución normal.

En resumen, runif y rnorm son herramientas básicas pero poderosas en R para la generación de números aleatorios, cada una adecuada para diferentes tipos de distribuciones y aplicaciones.

Ejemplo Práctico con purrr

Vamos a crear algunas listas y aplicar funciones de purrr:

library(purrr)

# Crear listas de ejemplo
lista1 <- list(rnorm(10), runif(10), rnorm(10, mean = 3))
lista2 <- list(rnorm(10), runif(10), rnorm(10, mean = 5))

# Calcular la media de cada conjunto de datos
medias <- map_dbl(lista1, mean)

Con map2() y pmap(), podemos operar sobre múltiples listas:

# Sumar elementos correspondientes de lista1 y lista2
sumas <- map2_dbl(lista1, lista2, ~ sum(.x + .y))

Finalmente, reduce() nos permite combinar elementos de un vector:

# Suma acumulativa de un vector
vector <- 1:10
total <- reduce(vector, `+`)

Cómo has visto, forcats y purrr son herramientas poderosas en el arsenal de cualquier usuario de R. Mientras forcats nos permite manejar datos categóricos de manera más eficiente, purrr introduce un enfoque más elegante y potente para la programación funcional. Juntos, estos paquetes amplían nuestras capacidades para manipular y analizar datos en R, haciendo que nuestras tareas sean más simples y nuestro código más limpio.

En futuros artículos, continuaremos explorando más componentes de este poderoso paquete y cómo pueden ayudarnos en nuestro análisis de datos.


Deja un comentario

Tu dirección de correo electrónico no será publicada.