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.