Lecciones del módulo (2/2)
Mutaciones y Agregaciones
Además de seleccionar y filtrar, dplyr ofrece potentes funcionalidades para crear nuevas columnas calculadas y para resumir los datos agregándolos en grupos.
Crear Nuevas Columnas: mutate()
El verbo mutate() permite calcular nuevas columnas o modificar columnas existentes, manteniendo intactas las columnas originales.
# Agrega una columna 'double_salary' calculada sobre el valor de 'salary'
df %>%
mutate(double_salary = salary * 2)
# Puedes crear múltiples columnas al mismo tiempo
df %>%
mutate(
total_cost = quantity * price,
tax = total_cost * 0.22
)
Agrupación y Agregación: group_by() y summarise()
A menudo, el análisis de datos requiere el cálculo de estadísticas de resumen (ej. media, suma, conteo) para grupos de filas (por ejemplo, calcular el salario medio para cada departamento).
1. group_by()
Agrupa el data frame basándose en los valores de una o más columnas. Por sí solo no cambia el aspecto visual de los datos, pero le indica a dplyr que las operaciones siguientes deberán ejecutarse "grupo por grupo".
2. summarise() (o summarize())
Reduce muchas filas a una sola fila de resumen aplicando funciones estadísticas como mean(), sum(), min(), max(), o n() (que cuenta las filas).
# Calcula el salario medio por departamento
df %>%
group_by(department) %>%
summarise(mean_salary = mean(salary))
Si deseas contar cuántos registros pertenecen a cada grupo:
# Cuenta cuántos empleados hay por ciudad
df %>%
group_by(city) %>%
summarise(count = n())
Pruébalo tú
Ejercicio 1: Crea una columna calculada
Dado el data frame df, crea una nueva columna llamada total_price multiplicando la columna quantity por la columna price usando mutate(). Guarda el resultado en df_new.
Mostrar pista
Usa mutate(total_price = quantity * price) dentro de una pipeline sobre df.
Solución disponible después de 3 intentos
Ejercicio 2: Agrupa y resume con la media
Calcula la media de la columna salary agrupando los registros por la columna department. Guarda la columna agregada con el nombre mean_salary y asigna el resultado final a df_grouped.
Mostrar pista
Usa df %>% group_by(department) %>% summarise(mean_salary = mean(salary))
Solución disponible después de 3 intentos
Ejercicio 3: Cuenta elementos por grupo
Cuenta el número de filas para cada ciudad (columna city). Asigna el conteo a la variable count dentro de summarise() usando la función n() y guarda el resultado final en df_counts.
Mostrar pista
Combina group_by(city) con summarise(count = n()) en una pipeline.
Solución disponible después de 3 intentos
Ejercicio 4: Resúmenes múltiples
Calcula el valor mínimo (min_price) y el valor máximo (max_price) de la columna price agrupando por la columna category. Guarda el resultado en df_summary.
Mostrar pista
Dentro de summarise(), separa las métricas min_price = min(price) y max_price = max(price) con una coma.
Solución disponible después de 3 intentos
Ejercicio 5: Agregación y filtros combinados
Escribe una pipeline que agrupe df por la columna department, calcule la media de salary guardándola en la nueva columna avg_salary usando mutate() (atención: usa mutate, no summarise, para mantener todas las filas), y finalmente filtre manteniendo solo los registros con salary estrictamente mayor que avg_salary. Guarda el resultado en res.
Mostrar pista
Usa df %>% group_by(department) %>% mutate(avg_salary = mean(salary)) %>% filter(salary > avg_salary)
Solución disponible después de 3 intentos