4.5 Summarise
Con summarise()
podemos agrupar diversos valores y aplicar una función para obtener un resumen
que condense los valores. Para eso, agrupamos dada una variable. Por ejemplo, para obtener las poblaciones
totales por estado
%>%
poblacion ::group_by(nom_ent) %>%
dplyr::summarise(pobtot = sum(pobtot)) dplyr
## # A tibble: 32 × 2
## nom_ent pobtot
## <chr> <dbl>
## 1 Aguascalientes 1425607
## 2 Baja California 3769020
## 3 Baja California Sur 798447
## 4 Campeche 928363
## 5 Chiapas 5543828
## 6 Chihuahua 3741869
## 7 Ciudad de México 9209944
## 8 Coahuila 3146771
## 9 Colima 731391
## 10 Durango 1832650
## # … with 22 more rows
Y para aplicar la misma función a diferentes variables o columnas sin repetir mucho
código, se puede utilizar la función across()
.
%>%
poblacion ::group_by(nom_ent) %>%
dplyr::summarise(dplyr::across(c(pobtot, pobfem, pob0_14, pob15_64, pob65_mas), mean)) %>%
dplyrhead(3)
## # A tibble: 3 × 6
## nom_ent pobtot pobfem pob0_14 pob15_64 pob65_mas
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Aguascalientes 129601. 66266. 35018. 85621. 8825.
## 2 Baja California 628170 311405. 146384. 439536. 40880
## 3 Baja California Sur 159689. 78514. 39411. 109808. 9703.
A across()
le podemos especificar
las columnas a resumir o también podemos seleccionarlas de acuerdo a su nombre o a su
tipo de datos, usando selectores de tidyselect.
%>%
poblacion ::group_by(nom_ent) %>%
dplyr::summarise(dplyr::across(starts_with("pob"), mean)) %>%
dplyrhead(3)
## # A tibble: 3 × 6
## nom_ent pobtot pobfem pob0_14 pob15_64 pob65_mas
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Aguascalientes 129601. 66266. 35018. 85621. 8825.
## 2 Baja California 628170 311405. 146384. 439536. 40880
## 3 Baja California Sur 159689. 78514. 39411. 109808. 9703.
%>%
poblacion ::group_by(nom_ent) %>%
dplyr::summarise(dplyr::across(where(is.double), mean)) %>%
dplyrhead(3)
## # A tibble: 3 × 6
## nom_ent pobtot pobfem pob0_14 pob15_64 pob65_mas
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Aguascalientes 129601. 66266. 35018. 85621. 8825.
## 2 Baja California 628170 311405. 146384. 439536. 40880
## 3 Baja California Sur 159689. 78514. 39411. 109808. 9703.
El resultado es el mismo, pero seleccionamos las columnas deseadas de diferente forma, lo cual puede ser útil si tenemos dataframes muy grandes.
Existen un par de funciones en dplyr que nos permiten hacer un agregado rápido y sencillo
en nuestros datos. Con count()
podemos contar los valores únicos de una o más variables y
tally()
logra lo mismo, pero nosotros tenemos que especificar el agrupamiento. Por ejemplo,
en el dataset de población, contando las apariciones de cada estado, estaríamos contando
el número de municipios de cada estado que aparecen en el censo del INEGI.
%>%
poblacion count(nom_ent, sort = TRUE)
## # A tibble: 32 × 2
## nom_ent n
## <chr> <int>
## 1 Oaxaca 570
## 2 Puebla 217
## 3 Veracruz 212
## 4 Jalisco 125
## 5 México 125
## 6 Chiapas 124
## 7 Michoacán 113
## 8 Yucatán 106
## 9 Hidalgo 84
## 10 Guerrero 81
## # … with 22 more rows
%>%
poblacion group_by(nom_ent) %>%
tally(sort = TRUE)
## # A tibble: 32 × 2
## nom_ent n
## <chr> <int>
## 1 Oaxaca 570
## 2 Puebla 217
## 3 Veracruz 212
## 4 Jalisco 125
## 5 México 125
## 6 Chiapas 124
## 7 Michoacán 113
## 8 Yucatán 106
## 9 Hidalgo 84
## 10 Guerrero 81
## # … with 22 more rows
Ambos resultados son iguales y al usar la opción sort=TRUE
, los resultados aparecen
ordenados de forma descendente. Estas funciones utilizan hacen uso de la función n()
para contar los valores únicos y también podemos utilizarla, en conjunto con otras
funciones en nuestro resumen.
%>%
poblacion group_by(nom_ent) %>%
summarise(pobtot = sum(pobtot),
municipios = n()) %>%
arrange(desc(municipios))
## # A tibble: 32 × 3
## nom_ent pobtot municipios
## <chr> <dbl> <int>
## 1 Oaxaca 4132148 570
## 2 Puebla 6583278 217
## 3 Veracruz 8062579 212
## 4 Jalisco 8348151 125
## 5 México 16992418 125
## 6 Chiapas 5543828 124
## 7 Michoacán 4748846 113
## 8 Yucatán 2320898 106
## 9 Hidalgo 3082841 84
## 10 Guerrero 3540685 81
## # … with 22 more rows
Las funciones slice_max()
y slice_min()
nos permiten seleccionar las filas
con valores máximos y mínimos dado una variable con el argumento order_by
y según el agrupamiento que hayamos elegido.
Por ejemplo, para obtener los municipios con mayor población total
%>%
poblacion group_by(nom_ent) %>%
slice_max(order_by = pobtot)
## # A tibble: 32 × 9
## # Groups: nom_ent [32]
## entidad nom_ent mun nom_mun pobtot pobfem pob0_14 pob15…¹ pob65…²
## <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 01 Aguascalientes 001 Aguasc… 9.49e5 486917 240583 639532 67941
## 2 02 Baja California 004 Tijuana 1.92e6 953783 449147 1359876 107406
## 3 03 Baja California … 008 Los Ca… 3.51e5 170167 93513 242624 12209
## 4 04 Campeche 002 Campec… 2.94e5 152522 67071 201182 25297
## 5 07 Chiapas 101 Tuxtla… 6.04e5 316623 145953 413489 42523
## 6 08 Chihuahua 037 Juárez 1.51e6 755473 380302 1042232 85438
## 7 09 Ciudad de México 007 Iztapa… 1.84e6 947835 366835 1293944 174312
## 8 05 Coahuila 030 Saltil… 8.80e5 442166 229165 590090 57919
## 9 06 Colima 007 Manzan… 1.91e5 95914 46527 131002 12994
## 10 10 Durango 005 Durango 6.89e5 353285 181469 454946 50310
## # … with 22 more rows, and abbreviated variable names ¹pob15_64, ²pob65_mas
O para obtener los dos municipios con menos población en cada estado
%>%
poblacion group_by(nom_ent) %>%
slice_min(order_by = pobtot, n = 2)
## # A tibble: 64 × 9
## # Groups: nom_ent [32]
## entidad nom_ent mun nom_mun pobtot pobfem pob0_14 pob15…¹ pob65…²
## <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 01 Aguascalientes 008 San Jo… 9552 5020 3033 5838 681
## 2 01 Aguascalientes 004 Cosío 17000 8708 5183 10699 1118
## 3 02 Baja California 003 Tecate 108440 51310 25657 74969 7576
## 4 02 Baja California 006 San Qu… 117568 57790 36132 76391 4961
## 5 03 Baja California … 009 Loreto 18052 8795 4532 12212 1286
## 6 03 Baja California … 002 Mulegé 64022 30951 16999 42453 4460
## 7 04 Campeche 007 Paliza… 8683 4260 2442 5379 862
## 8 04 Campeche 008 Tenabo 11452 5655 3120 7406 926
## 9 07 Chiapas 088 Sunuapa 2308 1133 754 1382 172
## 10 07 Chiapas 063 Osumac… 3983 2004 1241 2474 263
## # … with 54 more rows, and abbreviated variable names ¹pob15_64, ²pob65_mas