La reestructuración de datos es una habilidad esencial en el análisis de datos, ya que a menudo los datos no están en el formato adecuado para el análisis. En este módulo, aprenderemos cómo transformar y reorganizar datos utilizando R. Nos enfocaremos en las funciones y paquetes más utilizados para estas tareas, como tidyr y reshape2.

Contenido

  1. Introducción a la Reestructuración de Datos
  2. Funciones Básicas de tidyr
  3. Funciones Básicas de reshape2
  4. Ejemplos Prácticos
  5. Ejercicios y Soluciones

  1. Introducción a la Reestructuración de Datos

La reestructuración de datos implica cambiar la forma en que los datos están organizados. Esto puede incluir:

  • Pivotar: Convertir datos de formato ancho a largo y viceversa.
  • Unir: Combinar múltiples conjuntos de datos en uno solo.
  • Separar y Unir Columnas: Dividir una columna en múltiples columnas o combinar varias columnas en una sola.

  1. Funciones Básicas de tidyr

El paquete tidyr es parte del ecosistema tidyverse y proporciona funciones para limpiar y reestructurar datos.

2.1 gather()

Convierte datos de formato ancho a largo.

library(tidyr)
data <- data.frame(
  id = 1:3,
  year_2019 = c(10, 20, 30),
  year_2020 = c(15, 25, 35)
)

long_data <- gather(data, key = "year", value = "value", year_2019:year_2020)
print(long_data)

2.2 spread()

Convierte datos de formato largo a ancho.

wide_data <- spread(long_data, key = "year", value = "value")
print(wide_data)

2.3 separate()

Divide una columna en múltiples columnas.

data <- data.frame(
  id = 1:3,
  date = c("2020-01-01", "2020-02-01", "2020-03-01")
)

separated_data <- separate(data, col = "date", into = c("year", "month", "day"), sep = "-")
print(separated_data)

2.4 unite()

Combina múltiples columnas en una sola.

united_data <- unite(separated_data, col = "date", year, month, day, sep = "-")
print(united_data)

  1. Funciones Básicas de reshape2

El paquete reshape2 también es muy útil para la reestructuración de datos, especialmente para operaciones de pivotar.

3.1 melt()

Convierte datos de formato ancho a largo.

library(reshape2)
data <- data.frame(
  id = 1:3,
  year_2019 = c(10, 20, 30),
  year_2020 = c(15, 25, 35)
)

melted_data <- melt(data, id.vars = "id", variable.name = "year", value.name = "value")
print(melted_data)

3.2 dcast()

Convierte datos de formato largo a ancho.

casted_data <- dcast(melted_data, id ~ year, value.var = "value")
print(casted_data)

  1. Ejemplos Prácticos

Ejemplo 1: Reestructuración de Datos de Ventas

Supongamos que tenemos un conjunto de datos de ventas en formato ancho y queremos convertirlo a formato largo para análisis.

sales_data <- data.frame(
  product = c("A", "B", "C"),
  Q1 = c(100, 150, 200),
  Q2 = c(120, 160, 210),
  Q3 = c(130, 170, 220),
  Q4 = c(140, 180, 230)
)

long_sales_data <- gather(sales_data, key = "quarter", value = "sales", Q1:Q4)
print(long_sales_data)

Ejemplo 2: Separar y Unir Columnas de Fechas

Supongamos que tenemos un conjunto de datos con una columna de fechas y queremos separar esta columna en año, mes y día.

date_data <- data.frame(
  id = 1:3,
  date = c("2020-01-01", "2020-02-01", "2020-03-01")
)

separated_date_data <- separate(date_data, col = "date", into = c("year", "month", "day"), sep = "-")
print(separated_date_data)

united_date_data <- unite(separated_date_data, col = "date", year, month, day, sep = "-")
print(united_date_data)

  1. Ejercicios y Soluciones

Ejercicio 1: Reestructuración de Datos de Temperatura

Dado el siguiente conjunto de datos de temperatura, conviértelo de formato ancho a largo.

temperature_data <- data.frame(
  city = c("New York", "Los Angeles", "Chicago"),
  Jan = c(30, 50, 20),
  Feb = c(32, 55, 25),
  Mar = c(45, 60, 35)
)

# Solución
long_temperature_data <- gather(temperature_data, key = "month", value = "temperature", Jan:Mar)
print(long_temperature_data)

Ejercicio 2: Separar y Unir Columnas de Nombres

Dado el siguiente conjunto de datos de nombres completos, sepáralos en nombres y apellidos, y luego únelos de nuevo.

name_data <- data.frame(
  id = 1:3,
  full_name = c("John Doe", "Jane Smith", "Alice Johnson")
)

# Solución
separated_name_data <- separate(name_data, col = "full_name", into = c("first_name", "last_name"), sep = " ")
print(separated_name_data)

united_name_data <- unite(separated_name_data, col = "full_name", first_name, last_name, sep = " ")
print(united_name_data)

Conclusión

En esta sección, hemos aprendido cómo reestructurar datos utilizando las funciones de los paquetes tidyr y reshape2. Estas habilidades son fundamentales para preparar los datos para el análisis y la visualización. En el próximo módulo, exploraremos cómo trabajar con grandes conjuntos de datos, lo que nos permitirá aplicar estas técnicas a datos más complejos y voluminosos.

Programación en R: De Principiante a Avanzado

Módulo 1: Introducción a R

Módulo 2: Manipulación de Datos

Módulo 3: Visualización de Datos

Módulo 4: Análisis Estadístico

Módulo 5: Manejo Avanzado de Datos

Módulo 6: Conceptos Avanzados de Programación

Módulo 7: Aprendizaje Automático con R

Módulo 8: Temas Especializados

Módulo 9: Proyecto y Estudios de Caso

© Copyright 2024. Todos los derechos reservados