Библиотека dplyr в R

—

от автора

Привет, Хабр!

Библиотека dplyr в R позволяет манипулировать данными, проводить фильтрацию, выборку, сортировку, группировку данных и многое другое.

В этой статье как раз и рассмотрим эту библиотеку!

Для начала установим:

install.packages("dplyr")

Основные функции dplyr

Функция filter() используется для выбора строк из данных, которые соответствуют определенным условиям:

library(dplyr)  # создаем фрейм данных с информацией о студентах students <- data.frame(   name = c("Alice", "Bob", "Charlie", "David"),   age = c(22, 25, 21, 24),   grade = c("A", "B", "C", "A") )  # фильтруем данные, чтобы выбрать студентов, старше 21 года filtered_students <- filter(students, age > 21) print(filtered_students)

Функция select() используется для выбора определенных столбцов из данных:

# выбираем только столбцы с именами студентов и их оценками selected_data <- select(students, name, grade)

mutate() позволяет создавать новые переменные на основе существующих данных:

# создаем новую переменную для студентов с возрастом более 23 лет mutated_data <- mutate(students, senior = ifelse(age > 23, "Yes", "No")) print(mutated_data)

summarize() используется для вычисления сводной информации по данным:

# вычисляем средний возраст студентов summary_data <- summarize(students, average_age = mean(age)) print(summary_data)

arrange() используется для сортировки данных по определенным столбцам:

# сортируем студентов по возрасту по возрастанию sorted_data <- arrange(students, age) print(sorted_data)

Работа с группами данных

group_by() используется для группировки данных по одному или нескольким столбцам:

library(dplyr)  # создаем фрейм данных с информацией о продажах sales <- data.frame(   product = c("A", "B", "A", "B", "A"),   amount = c(100, 150, 200, 120, 180) )  # группируем данные по продукту grouped_sales <- group_by(sales, product) print(grouped_sales)

После группировки данных можно применить summarize() для вычисления статистик по каждой группе:

summary_data <- summarize(grouped_sales, avg_sales = mean(amount)) print(summary_data)

Можно вычислить несколько статистик сразу для каждой группы, снова юзая summarize():

summary_data <- summarize(grouped_sales,                             avg_sales = mean(amount),                            max_sales = max(amount)) print(summary_data)

Конечно, можно выполнять и другие операции, например, фильтрацию или создание новых переменных:

# фильтрация данных для каждой группы, оставляя только значения выше среднего filtered_data <- grouped_sales %>%   filter(amount > mean(amount)) print(filtered_data)

Слияние и объединение данных

Методы объединения данных:

  1. left_join(): объединение данных по ключу из первого (левого) набора данных.

  2. right_join(): объединение данных по ключу из второго (правого) набора данных.

  3. inner_join(): возвращает только строки, которые имеют совпадающие значения ключей в обоих наборах данных.

  4. full_join(): возвращает все строки из обоих наборов данных, дополняя пропущенные значения NA, если данных не хватает.

# пример df1 <- data.frame(id = c(1, 2, 3),                   name = c("Ivan", "Kolya", "Nastya")) df2 <- data.frame(id = c(2, 3, 4),                   age = c(25, 30, 35))  # left_join(): объединяем данные по ключу "id", оставляя все строки из df1 left_merged <- left_join(df1, df2, by = "id") print(left_merged)  # right_join(): объединяем данные по ключу "id", оставляя все строки из df2 right_merged <- right_join(df1, df2, by = "id") print(right_merged)  # inner_join(): объединяем данные по ключу "id", оставляя только строки с совпадающими значениями ключа inner_merged <- inner_join(df1, df2, by = "id") print(inner_merged)  # full_join(): объединяем данные по ключу "id", возвращая все строки из обоих наборов данных full_merged <- full_join(df1, df2, by = "id") print(full_merged)

Примеры использования

Анализ данных о продажах:

library(dplyr)  # грузим данные о продажах sales_data <- read.csv("sales_data.csv")  # фильтрация данных для определенного периода времени sales_filtered <- sales_data %>%   filter(Date >= as.Date("2023-01-01") & Date <= as.Date("2024-12-31"))  # группировка данных по продукту и вычисление суммарных продаж sales_summary <- sales_filtered %>%   group_by(Product) %>%   summarise(Total_Sales = sum(Sales))  print(sales_summary)

Обработка данных клиентов:

library(dplyr)  customer_data <- read.csv("customer_data.csv")  # фильтрация данных для определенной страны customer_filtered <- customer_data %>%   filter(Country == "Spain")  # создание новой переменной для расчета возраста клиентов customer_processed <- customer_filtered %>%   mutate(Age = year(now()) - Year_of_Birth)  # выборка нужных столбцов customer_selected <- customer_processed %>%   select(Name, Age, Gender, Email)  print(customer_selected)

Небольшой анализ трафика сайта:

library(dplyr)  web_traffic <- read.csv("web_traffic.csv")  # фильтрация данных для определенной страны и периода времени traffic_filtered <- web_traffic %>%   filter(Country == "USA", Date >= as.Date("2023-01-01"))  # вычисление средней продолжительности сеанса average_session_duration <- traffic_filtered %>%   summarise(Avg_Session_Duration = mean(Session_Duration))  print(average_session_duration)

Сводная статистика по сотрудникам и их ЗП:

library(dplyr)  employee_data <- read.csv("employee_data.csv")  # группировка данных по отделу и вычисление средней зарплаты salary_summary <- employee_data %>%   group_by(Department) %>%   summarise(Avg_Salary = mean(Salary))  # сортировка результатов по убыванию средней зарплаты salary_summary_sorted <- salary_summary %>%   arrange(desc(Avg_Salary))  print(salary_summary_sorted)

Все необходимые инструменты и методы для манипуляции с данными и анализа можно освоить на онлайн-курсах OTUS: в каталоге можно посмотреть список всех программ, а в календаре — записаться на открытые уроки.


ссылка на оригинал статьи https://habr.com/ru/articles/811581/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *