El paquete tidyverse
incluye diversos paquetes, entre los que se encuentra tidyr
, que nos permite realizar transformaciones en la estructura de un dataset. A continuación analizaremos 2 casos:
Tipo 1. Nuestro dataset tiene diferentes categorías que están separadas en muchas filas. Por ejemplo:
Tipo 2. Nuestro dataset tiene diferentes categorías que están separadas en muchas columnas. Por ejemplo:
Como verán, en ambos casos la información es la misma, lo que cambia es la estructura.
Es muy probable que al analizar bases de datos nos encontramos con algunas estructuras similares a estas y querramos cambiarlas. Para pasar del Tipo 1 de estructura al Tipo 2 y viceversa utilizaremos las funciones spread()
y gather()
respectivamente.
Antes de comenzar, lo primero que debemos hacer es activar nuestra librería tidyverse
:
library(tidyverse)
Ahora carguemos nuestro dataset de datos de Properati:
datos_amba <- read.csv("data/amba_properati.csv")
Para trabajar con menos volumen de datos y que sea más sencillo comprender el ejemplo, hagamos una agrupación por provincia y tipo de operación y calculemos el valor del m2:
datos_amba <- datos_amba %>%
group_by(provincia, operation_type) %>%
summarise(valor_m2=mean(price/surface_covered))
head(datos_amba)
## # A tibble: 4 x 3
## # Groups: provincia [2]
## provincia operation_type valor_m2
## <fct> <fct> <dbl>
## 1 CABA Alquiler 617.
## 2 CABA Venta 3119.
## 3 GBA Alquiler 399.
## 4 GBA Venta 2024.
Bien, ya tenemos un pequeño dataset de 3 columnas y 4 filas que presentan una estructura similar a la que se muestra al inicio como “Tipo 1”.
Si necesitamos pasar el dataset al otro formato extendido, debemos usar spread()
indicando el dataset que quiero modificar (datos_amba), la columna que quiero separar (key=operation_type) y la columna que contiene lo valores que quiero mantener en la tabla (value=valor_m2):
datos_amba <- spread(datos_amba, key=operation_type, value=valor_m2)
El resultado es el siguiente:
head(datos_amba)
## # A tibble: 2 x 3
## # Groups: provincia [2]
## provincia Alquiler Venta
## <fct> <dbl> <dbl>
## 1 CABA 617. 3119.
## 2 GBA 399. 2024.
Se ve como ahora tenemos un dataset extendido, donde las categorías incluidas en columna operation_type se dividieron en 2 columnas: “Alquiler” y “Venta”. Pero, ¿Cómo hacemos si queremos volver al dataset original?
Esto lo hacemos con la función gather()
.
Esta función que une múltiples columnas en una sola, se suele utilizar cuando todas las columnas representan valores de una variable. Por ejemplo, en nuestro caso, tanto “Alquiler” como “Venta” pueden ser categorías de una variable llamada operation_type.
Para utilizar gather()
debemos indicar el dataset que queremos modificar (datos_amba), la nueva columna donde queremos agrupar múltiples columnas (key=“operation_type”), la nueva columna donde queremos agrupar los valores de toda la tabla (value=“valor_m2”), y por último debemos indicar que rango de columnas son las que queremos incluir en la key (Alquiler:Venta).
datos_amba <- gather(datos_amba, key="operation_type", value="valor_m2", Alquiler:Venta)
head(datos_amba)
## # A tibble: 4 x 3
## # Groups: provincia [2]
## provincia operation_type valor_m2
## <fct> <chr> <dbl>
## 1 CABA Alquiler 617.
## 2 GBA Alquiler 399.
## 3 CABA Venta 3119.
## 4 GBA Venta 2024.
Y ahora si, volvimos al otro formato de tabla.