Привет, Хабр!
Библиотека 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)
Слияние и объединение данных
Методы объединения данных:
left_join(): объединение данных по ключу из первого (левого) набора данных.right_join():объединение данных по ключу из второго (правого) набора данных.inner_join(): возвращает только строки, которые имеют совпадающие значения ключей в обоих наборах данных.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: в каталоге можно посмотреть список всех программ, а в календаре — записаться на открытые уроки.
