En una hoja de cálculo, las tablas dinámicas o pivot tables son
potentes herramientas para resumir los datos de diferentes maneras.
Podemos crear estas tablas utilizando las funciones
group_by
y summarize
del paquete dplyr.
Echemos un vistazo a nuestro informe, justo después de leer los datos, creamos una tabla de resumen con el número de casos y la masa corporal media de cada especie de nuestro conjunto de datos.
Podemos utilizar group_by()
para agrupar nuestros datos
por especie y summarize()
para calcular el
número de casos y la masa_corporal_g media para cada
grupo.
%>%
pinguinos group_by(especie) %>%
summarise(count = n(),
masa_corporal_media = mean(masa_corporal_g, na.rm = TRUE))
## # A tibble: 3 × 3
## especie count masa_corporal_media
## <chr> <int> <dbl>
## 1 Adelia 152 3701.
## 2 Barbijo 68 3733.
## 3 Papúa 124 5076.
La función n()
devuelve el número de casos y la función
mean
calcula la media o promedio. El parámetro
na.rm = TRUE
indica a la función que elimine los valores
faltantes (NA
) antes de realizar el cálculo.
Pregunta: ¿Qué pasa si no se utiliza
group_by()
antes desummarise()
? Probémoslo y discutamos lo que ocurre.
%>%
pinguinos summarise(count = n(),
masa_corporal_media = mean(masa_corporal_g, na.rm = TRUE))
## # A tibble: 1 × 2
## count masa_corporal_media
## <int> <dbl>
## 1 344 4202.
Así que si no agrupamos por la especie primero, obtendremos una sola estadística de resumen (n y media en este caso) para todo el conjunto de datos.
Ahora, queremos la media de la masa corporal en kilogramos y con dos
decimales. Podemos cambiar nuestra llamada a summarise()
para obtener ese cálculo.
%>%
pinguinos group_by(especie) %>%
summarise(count = n(),
masa_corporal_media = round(mean(masa_corporal_g/1000, na.rm = TRUE), 2))
## # A tibble: 3 × 3
## especie count masa_corporal_media
## <chr> <int> <dbl>
## 1 Adelia 152 3.7
## 2 Barbijo 68 3.73
## 3 Papúa 124 5.08
Primero dividimos la masa corporal por 1000 para transformarla de
gramos a kilogramos y luego utilizamos la función round()
para redondear a sólo dos decimales.
Ahora estamos en el punto en el que queremos guardar esta información resumida como una variable para poder utilizarla en posteriores análisis y formatos.
Así que vamos a añadir una asignación de variable a esa primera línea:
<- pinguinos %>%
resumen group_by(especie) %>%
summarise(count = n(),
masa_corporal_media = round(mean(masa_corporal_g/1000, na.rm = TRUE), 2))
Para que nuestra tabla se vea mejor en un informe, tenemos que cambiar algunos de sus elementos. Por ejemplo, el nombre de las variables debe ser informativo para una persona (de momento son nombres útiles para una computadora), y podemos añadirle un título y cambiar la alineación de los números.
Podemos hacerlo con la función kable
.
%>%
resumen ::kable(col.names = c("Especie", "Cantidad", "Masa corporal media"),
knitralign = "lcc",
caption = "Resumen de los pingüinos en el dataset por especie.")
Especie | Cantidad | Masa corporal media |
---|---|---|
Adelia | 152 | 3.70 |
Barbijo | 68 | 3.73 |
Papúa | 124 | 5.08 |
Podemos hacer mucho más con otras funciones (o “verbos”) de dplyr. Veamos algunos más.
Muchas veces querremos trabajar con información que se deriva de los
datos originales. Esto se suele hacer añadiendo una nueva columna. Lo
hacemos con la función mutate()
.
Podemos añadir una nueva variable (llamada prop
) que
represente la proporción de pingüinos en cada especie
con el uso de mutate()
.
%>%
pinguinos group_by(especie) %>%
summarise(count = n(),
masa_corporal_media = round(mean(masa_corporal_g/1000, na.rm = TRUE), 2)) %>%
mutate(prop = count/nrow(pinguinos))
## # A tibble: 3 × 4
## especie count masa_corporal_media prop
## <chr> <int> <dbl> <dbl>
## 1 Adelia 152 3.7 0.442
## 2 Barbijo 68 3.73 0.198
## 3 Papúa 124 5.08 0.360
En nuestro informe también realizamos un gráfico por especies. Para
ello necesitamos mantener sólo los datos de la especie que queremos
analizar. Utilizamos la función filter()
para filtrar filas
de un data.frame, esta función devuelve un nuevo data.frame con sólo las
filas que satisfacen algunas condiciones.
Podemos utilizar operadores lógicos (>
,
<
, >=
, <=
,
==
) para crear condiciones a partir de variables numéricas.
Estos operadores también son útiles para fechas y cadenas de texto. El
siguiente código aplica una condición (que sea igual a) para datos de
tipo texto (la columna especie).
%>%
pinguinos filter(especie == "Papúa")
## # A tibble: 124 × 8
## especie isla largo_pico_mm alto_pico_mm largo_aleta_mm masa_corporal_g sexo
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 Papúa Bisc… 46.1 13.2 211 4500 hemb…
## 2 Papúa Bisc… 50 16.3 230 5700 macho
## 3 Papúa Bisc… 48.7 14.1 210 4450 hemb…
## 4 Papúa Bisc… 50 15.2 218 5700 macho
## 5 Papúa Bisc… 47.6 14.5 215 5400 macho
## 6 Papúa Bisc… 46.5 13.5 210 4550 hemb…
## 7 Papúa Bisc… 45.4 14.6 211 4800 hemb…
## 8 Papúa Bisc… 46.7 15.3 219 5200 macho
## 9 Papúa Bisc… 43.3 13.4 209 4400 hemb…
## 10 Papúa Bisc… 46.8 15.4 215 5150 macho
## # ℹ 114 more rows
## # ℹ 1 more variable: anio <dbl>
Actividad: Escribe el código necesario para filtrar todos los pingüinos de la isla Torgersen.
Actividad: Ahora escribe el código para filtrar todos los pingüinos con longitud de aleta mayor a 200.