Tidyr
El objetivo principal del paquete tidyr
es ordenar los datos en donde:
- Cada columna es variable.
- Cada fila es una observación.
- Cada celda es un valor único.
Formato ancho y formato largo
El formato ancho es común en hojas de cálculo donde se toman los datos, ya que resulta más práctico para el usuario visualizar y anotar. En la siguiente tabla se tomó la altura de tres plantas en tres localidades diferentes. Este formato es fácil de interpretar y visualizar para nosotros, sin embargo, es un formato difícil de trabajar para R.
Localidad | Planta_1 | Planta_2 | Planta_3 |
---|---|---|---|
Punto_1 | 5.1 | 6.2 | 8.3 |
Punto_2 | 10.2 | 13.3 | 14.5 |
Punto_3 | 20.3 | 21.8 | 25.1 |
En el formato largo cada variable ocupa una columna y cada observación una fila. Si transformamos el formato ancho a largo tendremos que una columna correspondería a la localidad, otra a la planta y la última a la medición de la altura.
Localidad | Planta | Altura |
---|---|---|
Punto_1 | Planta_1 | 5.1 |
Punto_2 | Planta_1 | 10.2 |
Punto_3 | Planta_1 | 20.3 |
Punto_2 | Planta_2 | 6.2 |
Punto_2 | Planta_2 | 13.3 |
Punto_3 | Planta_2 | 21.8 |
Punto_1 | Planta_3 | 8.3 |
Punto_2 | Planta_3 | 14.5 |
Punto_3 | Planta_3 | 25.1 |
El paquete tidyr
contiene la función gather()
que permite pasar de un formato ancho a uno largo, mientras la función spread()
permite pasar de un formato largo uno ancho.
## Cargar el paquete tidyr
library(tidyr)
## Crear un data frame
df_ancho <- data.frame(Localidad = paste(rep("Punto", 3), seq(1,3), sep = "_"),
Planta_1 = c(5.1, 10.2, 20.3),
Planta_2 = c(6.2, 13.3, 21.8),
Planta_3 = c(8.3, 14.5, 25.1))
## Pasar de formato ancho a formato largo
df_largo <- gather(data = df_ancho, key = "Planta", value = "Altura", 2:4)
## Pasar de formato largo a formato ancho
df_ancho_a <- spread(data = df_largo, key = "Planta", value = "Altura")
Unir y separar columnas
Mediante la función unite()
podemos unir varias columnas en una sola y también podemos seleccionar un separador. La contra parte es la función separate()
que nos permite separar una columna en varias de acuerdo a un separador presente.
## Unir mediante ; las columnas Localidad y Planta del df df_largo
df_union <- unite(data = df_largo, col = ID, Localidad, Planta, sep = ";")
## Separar la columna ID de df_union mediante el ;
df_sep <- separate(data = df_union, col = ID, c("Localidad", "Planta"), sep = ";")
Ejercicios
Para realizar los ejemplor descargar los siguentes archivos: Altura de tallos, Diametro de tallos y Ejercicio tibble y tidyr.