Уроки модуля (2/2)
Мутации и агрегации
Помимо выбора и фильтрации, dplyr предлагает мощные возможности для создания новых вычисляемых столбцов и суммирования данных путем объединения их в группы.
Создание новых столбцов: mutate()
Команда mutate() позволяет рассчитывать новые столбцы или изменять существующие, сохраняя при этом все исходные столбцы.
# Adds a 'double_salary' column computed as 'salary' multiplied by 2
df %>%
mutate(double_salary = salary * 2)
# You can create multiple columns at once
df %>%
mutate(
total_cost = quantity * price,
tax = total_cost * 0.22
)Группировка и агрегирование: group_by() и summarise().
Часто анализ данных требует расчета сводной статистики (например, среднего значения, суммы, количества) для определенных групп строк (например, расчета средней зарплаты для каждого отдела).
1. group_by()
Группирует фрейм данных по значениям одного или нескольких столбцов. Сам по себе он не меняет внешний вид данных, но сигнализирует dplyr, что последующие операции должны выполняться «группа за группой».
2. summarise() (или summarize())
Сворачивает множество строк в одну сводную строку, применяя статистические функции, такие как mean(), sum(), min(), max() или n() (которая подсчитывает строки).
# Calculates the average salary per department
df %>%
group_by(department) %>%
summarise(mean_salary = mean(salary))Если вы хотите подсчитать, сколько записей принадлежит каждой группе:
# Counts how many employees are in each city
df %>%
group_by(city) %>%
summarise(count = n())Попробуйте сами
Упражнение 1. Создание вычисляемого столбца
Учитывая фрейм данных df, создайте новый столбец с именем total_price, умножив столбец количества на столбец цены с помощью mutate(). Сохраните результат в df_new.
Показать подсказку
Используйте mutate(total_price = количество * цена) внутри конвейера на df.
Решение доступно после 3 попыток
Упражнение 2. Сгруппируйте и суммируйте со средним значением.
Рассчитайте среднее значение столбца зарплаты, сгруппировав записи по столбцу отдела. Сохраните агрегированный столбец под именем mean_salary и назначьте конечный результат df_grouped.
Показать подсказку
США df %>% group_by(отдел) %>% summarise(mean_salary = среднее(зарплата))
Решение доступно после 3 попыток
Упражнение 3. Подсчитайте элементы в группе
Подсчитайте количество строк для каждого города (столбец города). Присвойте счетчик переменной count внутри summarise() с помощью функции n() и сохраните окончательный результат в df_counts.
Показать подсказку
Объединение group_by(city) с суммированием(count = n()) в одном конвейере.
Решение доступно после 3 попыток
Упражнение 4. Несколько сводок
Рассчитайте минимальное значение (min_price) и максимальное значение (max_price) группировки столбцов цен по столбцу категории. Сохраните результат в df_summary.
Показать подсказку
Внутри summarise() разделите показатели min_price = min(price) и max_price = max(price) запятой.
Решение доступно после 3 попыток
Упражнение 5. Группировка и объединение фильтров
Напишите конвейер, который группирует df по столбцу отдела, вычисляет среднее значение зарплаты, сохраняя его в новом столбце avg_salary с помощью mutate() (Примечание: используйте mutate, а не суммирование, чтобы сохранить все строки), и, наконец, фильтрует, чтобы сохранять только записи с зарплатой, строго превышающей avg_salary. Сохраните в рез.
Показать подсказку
США df %>% group_by(отдел) %>% mutate(avg_salary = среднее(зарплата)) %>% filter(зарплата > avg_salary)
Решение доступно после 3 попыток