Модульні уроки (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 = quantity * price) у конвеєрі на df.
Рішення доступне після 3 спроб
Вправа 2: Згрупуйте та підсумуйте із середнім значенням
Обчисліть середнє значення стовпця зарплати, згрупувавши записи за стовпцем відділу. Збережіть агрегований стовпець із назвою mean_salary та призначте кінцевий результат df_grouped.
Показати підказку
США df %>% group_by(department) %>% summarise(mean_salary = mean(salary))
Рішення доступне після 3 спроб
Вправа 3: Порахуйте елементи в групі
Підрахуйте кількість рядків для кожного міста (стовпець міста). Призначте лічильник змінній count всередині summarise() за допомогою функції n() і збережіть кінцевий результат у df_counts.
Показати підказку
Поєднання group_by(city) з summarise(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, а не summarise, щоб зберегти всі рядки), і, нарешті, фільтрує, щоб зберігати лише записи із зарплатою, строго більшою за avg_salary. Зберегти в рез.
Показати підказку
Usa df %>% group_by(department) %>% mutate(avg_salary = mean(salary)) %>% filter(salary > avg_salary)
Рішення доступне після 3 спроб