6.7 Agrupamiento

La función group_by() genera agrupamientos virtuales. Divide a una base de datos en función de una columna categórica (factor), pero esta división no se almacena como tal. Si se escogiera como columna de agrupamiento un factor con tres niveles, no esperes ver como resultado tres tablas, cada una con las filas de cada nivel. Este agrupamiento virtual solo permite que las siguientes funciones de la pipeline traten por separado a cada nivel.

Esto es muy útil cuando se debe generar resúmenes estadísticos, por ejemplo promedio y desviación estándar, de variables separado por niveles de un factor en la tabla.

En el siguiente ejemplo solo veremos la agrupación, visible como un dato extra mostrado en consola impreso encima la tabla. Más adelante se usará agrupamiento dentro de una pipeline más realista.

Es importante desagrupar una vez que se acabaron los cálculos hechos con la pipeline. El no colocar ungroup() al final producirá errores cuando más adelante se usa la base de datos resultante en otras pipelines. Nunca dejes un group_by() sin desagrupar al final.

Ejemplo 6.13 Seleccionar las columnas Country, Year, Polio, Diph, y agrupar la base de datos WHO por año (columna Year). Mostrar las primeras 6 filas.

# Para este ejemplo no usaremos ungroup()
# con la finalidad de mostrar el resultado
# textual que aparece sobre una tabla agrupada
# indicando los grupos >> Groups:   Year [6]
WHO %>% 
  dplyr::select(Country, Year, Polio, Diph) %>%
  group_by(Year) %>% 
  head()
# # A tibble: 6 × 4
# # Groups:   Year [6]
#   Country      Year Polio  Diph
#   <chr>       <dbl> <dbl> <dbl>
# 1 Afghanistan  2015     6    65
# 2 Afghanistan  2014    58    62
# 3 Afghanistan  2013    62    64
# 4 Afghanistan  2012    67    67
# 5 Afghanistan  2011    68    68
# 6 Afghanistan  2010    66    66
Si estas seleccionando y luego agrupando, asegúrate de que la columna de agrupamiento esté dentro de las seleccionadas. La función antagonista de group_by() es ungroup().