Módulo práctico de ITA
(Grupo M)
Aprendimos a cargar datos y a hacerlos TIDY, pero es raro que los datos estén preparados para empezar nuestro análisis, así que hay que “arreglar/limpiar” los datos
dplyr es el paquete más importante a la hora de manipular datos: permite hacerlo de forma intuitivaprincipales funciones de dplyr
Tiene 6-7 funciones (o verbos) principales
%>%)select() : selecciona columnasfilter() : filtra/selecciona filas (que cumplen una o varias condiciones)mutate() : crea nuevas columnas (variables)arrange(): reordena las filasrename() : cambia los nombres de las columnassummarise() : resume (colapsa) los valores de una columna a un solo valor. Por ejemplo, calcula la media, máximo, mínimo, etc…hay una séptima función (que da mucha potencia a dplyr)
group_by() : “agrupa” filas (en función de una o varias condiciones)sintaxis de dplyr
Todas las funciones tienen una estructura o comportamiento similar:
el primer argumento siempre es un df
los siguientes argumentos describen que hacer con los datos.
el resultado es siempre un nuevo df
dplyr con ejemplostrabajaremos con datos del pkg gapminder
¿Supongo que ya sabéis que hace el siguiente código?
gapminder que está en el paquete gapminderselect() se utiliza para seleccionar variables
A veces queremos renombrar las columnas
rename()la función names() de R-base es útil
A veces queremos CREAR nuevas columnas
Podemos hacerlo con mutate()
Por ejemplo, podemos crear la variable: GDP = pop * gdpPercap
filter(): permite seleccionar filas
filas que cumplan unas determinadas condiciones o criterios lógicos
#- Observaciones de España (country == "Spain")
aa <- gapminder %>% filter(country == "Spain")
#- filas con valores de "lifeExp" < 29
aa <- gapminder %>% filter(lifeExp < 29)
#- filas con valores de "lifeExp" entre [29, 32]
aa <- gapminder %>% filter(lifeExp >= 29 & lifeExp <= 32)
#- observaciones de países de África con lifeExp > 72
aa <- gapminder %>% filter(lifeExp > 72 & continent == "Africa")
#- observaciones de países de África o Asia con lifeExp > 72
aa <- gapminder %>% filter(lifeExp > 72 & continent %in% c("Africa", "Asia") )
aa <- gapminder %>% filter(lifeExp > 72 & (continent == "Africa" | continent == "Asia") ) slice() es una variante de filter()
permite seleccionar filas pero por posición
variantes de slice()
slice_max() y slice_min(): seleccionan filas con valor máximo (o mínimo) de una variable:arrange(): permite reordenar las filas de un df
#- ordena las filas de MENOR a mayor según los valores de la v. lifeExp
aa <- gapminder %>% arrange(lifeExp)
#- ordena las filas de MAYOR a menor según los valores de la v. lifeExp
aa <- gapminder %>% arrange(desc(lifeExp))
#- ordena las filas de MENOR a mayor según los valores de la v. lifeExp.
#- Si hubiese empates se resuelven con la variable "pop"
aa <- gapminder %>% arrange(lifeExp, pop) summarize() para “resumir” variables
summarize(): coge una variable como input y devuelve un solo valor; por ejemplo, calcula la media aritmética (o el mínimo, o el máximo …) de una columna/variablegroup_by(): con esta función ya se puede ver la potencia de dplyr
En análisis de datos muchas operaciones queremos calcularlas para distintos grupos (p. ej. mujer/hombre, diferentes países, provincias …). group_by() permite hacerlo.
group_by() coge un df y lo convierte en un “df agrupado”. En ese nuevo “df agrupado”, las operaciones que hagamos, se harán por separado para cada uno de los grupos que hayamos definido. Ahora lo vemos.Ahora, el nº de observaciones de cada continente:
Uniendo tablas
Otras funciones de dplyr
across() y where()
COMBINANDO tablas (joining df’s)
Hasta ahora hemos trabajado con un único df, pero …
… muchas veces tenemos que trabajar con datos que están en varias tablas
joining df’s
Hay diversos tipos de uniones de tablas: un buen recurso para estos temas es el capítulo dedicado a JOINS en R4DS2ed
Las uniones más comunes son las “mutating joins”: todas añaden las columnas de df2 a df1; PERO …
3 tipos de mutating joins
inner_join(df1,df2): retorna las filas de df1 que también existen en df2left_join(df1,df2): retorna TODAS las filas de df1full_join(df1,df2): retorna TODAS las filas de df1 y de df2; (o sea, retorna TODAS las filas y TODAS las columnas de las 2 tablas)mutating joins: un ejemplo
mutating joins: un ejemplo
A veces queremos reordenar las columnas/variables
relocate()variantes de slice()
slice_sample(): permite obtener una muestra aleatoria de los datoscon dplyr 1.0.0, en 2020, aparecieron dos funciones importantes: across() y where()
across() y where(): estas funciones son un poco diferentes, solo se usan en combinación de otra función/verbo. Son 2 funciones que en la jerga del tidyverse no son verbos sino adverbios, cualifican/cambian lo que hacen otras funciones como select()Ejemplo de uso: select() junto a la función where() [🌶🌶🌶🌶]
gapminder las 2 primeras variables (country y continent) son factores y las 4 siguientes son variables numéricas.select() y where()más ejemplos de across() y where()
gapminder. Tendríamos que repetir código 6 veces … o usar across()across() y where() con summarise() 😱
Dentro de across() se puede utilizar where()
Con esto conseguimos poder aplicar criterios lógicos en la selección de variables: [🌶] [ 🌟 ]
dplyrResumen: las funciones de dplyr
Para trabajar con columnas: select(), rename() y mutate()
Para trabajar con filas: filter(), slice() y arrange()
Para resumir: summarise()
Para hacer los cálculos por grupos: group_by()
cada función hace una sola cosa: se encadenan con el operador pipe (%>%)