PREPARATIVOS INICIALES

Para no tener que cargar los paquetes dplyr y tidyr, se procede a activar el paquete tidyverse ya que incluye los dos anteriores como dependencias

library(tidyverse)

Establecer la carpeta de trabajo

setwd("D:/G2040/TEMA_1_Introduccion/TEMA_1_ejercicios")

Cargar el fichero

load("zonas_verdes.RData")

Estructura del fichero (similar a str())

glimpse(zonas_verdes)
## Rows: 100
## Columns: 6
## $ ID                 <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …
## $ barrio             <chr> "Retiro", "Retiro", "Chamberí", "Retiro", "Retiro",…
## $ parques            <int> 6, 4, 6, 7, 4, 5, 6, 8, 10, 9, 9, 10, 4, 5, 7, 3, 9…
## $ superficie         <dbl> 6.863999, 6.945574, 3.365407, 6.102484, 7.146998, 3…
## $ obras              <int> 0, 1, 1, 0, NA, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,…
## $ fecha_inauguracion <date> 1984-12-05, 1935-09-25, 1962-07-11, 1990-02-06, 20…

Conocer los nombres de las variables

names(zonas_verdes)
## [1] "ID"                 "barrio"             "parques"           
## [4] "superficie"         "obras"              "fecha_inauguracion"

o también

colnames(zonas_verdes)
## [1] "ID"                 "barrio"             "parques"           
## [4] "superficie"         "obras"              "fecha_inauguracion"

PAQUETE tidyr

Es un paquete que permite trabajar también con dataframes con una estructura en la que:

Este es el formato “wide”. En otras ocasiones, sin embargo, es posible organizar los datos en formato “long”. En este caso, una variable contiene múltiples observaciones de la(s) otra(s) variable(s).

En esencia, ninguno de los dos formatos es mejor o pear, aunque el formato “wide” permite detectar, de un vistazo, todas las variables con las que se trabaja, pero, al mismo tiempo, ocupa mucho más espacio en el disco duro.

En este paquete hay dos funciones que merece la pena destacar para gestionar estos cambios de disposición.

Función pivot_longer()

Se usa para transformar un dataframe con un formato (estructura) “wide” a un formato “long”. Es equivalente a la anterior función gather().

La sintaxis básica es la siguiente:

zonas_verdes %>% pivot_longer(cols=c(“var1”, “var2”, …), names_to=“col1_name”, values_to=“col2_name”) en la que

  • cols: nombres de las columnas a pivotar.
  • names_to: nombre que tendrá la nueva columna que incluye los nombres de las columnas previas.
  • values_to: nombre que tendrá la nueva columa con los datos de las columnas previas.

Usa pivot_longer() para transformar las columnas parques, superficie y obras en un formato largo, con una columna llamada indicador y otra valor.

zonas_largo <- zonas_verdes %>%
  pivot_longer(cols = c(parques, superficie, obras),
               names_to = "indicador",
               values_to = "valor")

A continuación se convierte fecha_inauguracion en tres columnas (año, mes, día) y luego transforma esas columnas en formato largo.

zonas_fecha_larga <- zonas_verdes %>%
  mutate(fecha_inauguracion = as.character(fecha_inauguracion)) %>%
  separate(fecha_inauguracion, into = c("año", "mes", "día"), sep = "-") %>%
  pivot_longer(cols = c(año, mes, día),
               names_to = "parte_fecha",
               values_to = "valor")

Función pivot_wider()

Esta función hace lo contrario, es decir, transforma un dataframe en formato “long” a “wide”. La sintaxis es la siguiente:

zonas_verdes %>% pivot_wider(names_from = var1, values_from = var2)

donde:

  • names_from: columna cuyas etiquetas serán usadas como nombre de las nuevas columnas.
  • values_from: columna cuyos valores formarán las nuevas columnas.

A partir del resultado del ejercicio anterior (zonas_largo), usa pivot_wider() para reconstruir la estructura original de columnas.

zonas_ancho <- zonas_largo %>%
  pivot_wider(names_from = indicador,
              values_from = valor)

Se creará una tabla donde cada valor único de obras (por ejemplo, 0, 1, NA) sea una columna, y el valor sea el número de registros por barrio. Este ejercicio requiere agrupar y contar antes de pivotar)

zonas_obras_barrio <- zonas_verdes %>%
  group_by(barrio, obras) %>%
  summarise(n = n(), .groups = "drop") %>%
  pivot_wider(names_from = obras,
              values_from = n,
              names_prefix = "obras_")

Tras extraer el año de la columna fecha_inauguracion, se crea una tabla con pivot_wider() donde cada año sea una columna y el valor sea el número de zonas verdes inauguradas ese año.

zonas_por_año <- zonas_verdes %>%
  mutate(año = format(fecha_inauguracion, "%Y")) %>%
  count(barrio, año) %>%
  pivot_wider(names_from = año,
              values_from = n,
              values_fill = 0)

📝 ACTIVIDAD EN EL AULA :

Usa pivot_longer() para convertir las columnas terraza, garaje y comunidad en dos columnas: servicio y valor_servicio.

A partir del resultado del ejercicio anterior (df_largo), usa pivot_wider() para volver a tener las columnas terraza, garaje y comunidad como estaban originalmente.

Usa pivot_wider() para crear una tabla donde cada valor único de habitaciones sea una columna, y su contenido sea el precio correspondiente. Agrupa por barrio para mantener el contexto.

Convierte la variable disponible en formato largo junto a barrio y precio, para analizar cómo varía el precio según la disponibilidad

Usa pivot_longer() para convertir todas las variables numéricas (por ejemplo: precio, superficie, valor, etc.) en dos columnas: variable y valor, manteniendo como identificadores el barrio y la disponibilidad (disponible).