8 pasos para transformar datos de panel en R

Tutorial para pasar los datos de formato largo a formato ancho y viceversa

Lo más normal cuando trabajamos con datos es que no los encontramos en el formato que queremos.

Es muy común que queremos que los datos sean visuales y nos aparecen en columnas en panel o al contrario. Afortunadamente, el software estadístico viene con paqueterías que ya nos solucionan este problema.

Sólo tenemos que aprender a usar las funciones que transforman los datos.

En este tutorial, aprenderás un paso a paso para transformar un conjunto de datos en R. Usaremos un ejemplo del Producto Interno Bruto (PIB) per cápita y aprenderemos funciones clave como reshapetidyr y data.table para reorganizar nuestros datos de formato largo a ancho y viceversa.

¿Listos? Adelante…

Paso #1: Comprender el Problema y Preparar los Datos

Imagina que deseas analizar el crecimiento económico de varios países entre 2000 y 2020.

Tienes un conjunto de datos con tres columnas: PaísAño y PIB_per_Cápita. Sin embargo, está en formato largo, lo que dificulta las comparaciones directas entre países a lo largo del tiempo. Este formato es útil para ciertos análisis estadísticos, pero no es el más intuitivo para visualizar o comparar datos rápidamente.

Necesitamos transformar este conjunto de datos al formato ancho, donde cada país tenga su propia columna de PIB per cápita para cada año.

Ejecuta el siguiente código en R para crear y mostrar los datos:

# Creamos un ejemplo simulado
countries <- rep(c("Argentina", "Brasil", "Chile", "México"), each = 21)
years <- rep(2000:2020, times = 4)
gdp_per_capita <- runif(84, 8000, 20000)

data_long <- data.frame(
  País = countries,
  Año = years,
  PIB_per_Cápita = gdp_per_capita
)

head(data_long)

¿Por Qué Necesitamos Transformar los Datos?

Los datos en formato largo pueden ser poco prácticos para ciertos análisis.

Si deseas comparar gráficamente el PIB per cápita de varios países a lo largo del tiempo, el formato largo complica el proceso. En cambio, un formato ancho facilita la creación de gráficos y comparaciones directas. Además, tener los datos reorganizados mejora la legibilidad y comprensión de la información.

Transformar nuestros datos nos permitirá visualizar tendencias y realizar análisis más efectivos.

Paso #2: Exploración y Limpieza Inicial de los Datos

Antes de cualquier transformación, necesitamos explorar y limpiar nuestros datos.

Esto implica verificar si hay valores faltantes, duplicados o inconsistencias. Una base de datos limpia garantiza resultados confiables y evita errores en etapas posteriores del análisis.

Ejecuta el siguiente código para explorar tus datos:

# Verificamos la estructura y posibles problemas
str(data_long)
summary(data_long)

# Revisamos si hay valores faltantes
sum(is.na(data_long))

Paso #3: Transformación con reshape

La función reshape de R es una herramienta clásica para reorganizar data frames.

Nos permite cambiar entre formatos largo y ancho, adaptándose a nuestras necesidades analíticas. Aunque puede parecer intimidante al principio, su uso es bastante directo una vez que entiendes sus parámetros clave.

Utiliza este código para transformar tus datos al formato ancho:

# Transformamos el data frame de formato largo a ancho
data_wide <- reshape(
  data_long,
  timevar = "Año",
  idvar = "País",
  direction = "wide"
)

head(data_wide)

Ahora, profundicemos en lo que acabamos de hacer.

La función reshape() requiere especificar varios argumentos clave:

  1. data: El data frame que deseas transformar (en este caso, data_long).
  2. timevar: La variable que identifica el tiempo o las diferentes instancias que deseas convertir en columnas. Aquí, Año es nuestra variable de tiempo, ya que queremos que cada año sea una columna separada.
  3. idvar: La variable que identifica las unidades únicas en tus datos. En este caso, País es nuestro identificador, ya que queremos que cada fila represente un país único.
  4. direction: La dirección de la transformación. Usamos "wide" para convertir de formato largo a ancho.

Indica siempre correctamente las variables timevar e idvar.

Si no las especificamos adecuadamente, R no sabrá cómo reorganizar los datos. timevar le dice a R qué variable debe expandir en columnas (cada año en nuestro caso), mientras que idvar le indica cómo agrupar las filas (cada país). Al hacerlo correctamente, obtenemos un data frame donde cada país tiene una fila única y los años se despliegan como columnas con sus respectivos valores de PIB per cápita.

Paso #4: Transformación Moderna con tidyr

tidyr es un paquete de R que simplifica la reorganización de datos.

Con funciones intuitivas como spread(), puedes transformar tus datos de manera más legible y eficiente. Es una excelente alternativa moderna a reshape(), especialmente si prefieres código más limpio.

Prueba el siguiente código:

# Instalamos tidyr si no está disponible
if (!require(tidyr)) install.packages("tidyr")
library(tidyr)

# Usamos spread para transformar los datos
data_wide_tidyr <- spread(data_long, key = Año, value = PIB_per_Cápita)

head(data_wide_tidyr)

Aquí, la función spread() simplifica el proceso.

  • data: Nuestro data frame original (data_long).
  • key: La variable que queremos convertir en columnas (Año).
  • value: Los valores que llenarán las nuevas columnas (PIB_per_Cápita).

El resultado es similar, pero los nombres de las columnas son más limpios.

Cada columna se nombra directamente con el año correspondiente, facilitando la lectura y el acceso a los datos. Esto mejora la legibilidad y hace que el código sea más intuitivo.

Paso #5: Reorganización Eficiente con data.table

Leer el artículo completo

Registrarse ahora para leer el artículo completo y acceder a todos los artículos por solo suscriptores.

Suscribirse
¿Ya tienes una cuenta? Iniciar sesión

¡Genial! Te has registrado exitosamente.

¡Bienvenido de vuelta! Has iniciado sesión correctamente.

Te has suscrito correctamente a Escribe tu primer paper de Economía usando Inteligencia Artificial.

¡Éxito! Revisa tu correo electrónico para obtener el enlace mágico para iniciar sesión.

¡Éxito! Se ha actualizado la información de facturación.

No se actualizó tu información de facturación.