5 видеороликов о пакете dplyr языка R
dplyr – популярный пакет для обработки данных в языке R. Небольшой плейлист из 10-15-минутных роликов познакомит с основным функциями пакета dplyr с учётом последних нововведений версии 1.0.0.
Статья подготовлена читателем Библиотеки программиста – Алексеем Селезнёвым, руководителем отдела аналитики в Netpeak. Не стесняйтесь присылать материалы для публикации по кнопке +
в верхней панели – тексты проходят редактуру, мы поможем сделать статью понятной для широкой аудитории.
Установка dplyr 1.0.0
Перед началом работы необходимо обновить или установить пакет dplyr. Делается это стандартной командой install.packages('dplyr')
.
Обновлённая функция summarise()
Функция summarise()
используется для агрегации данных. Ранее было необходимо прописать агрегирующие функции под каждый столбец либо использовать summarise_at()
, summarise_if()
, summarise_all()
. В версии dplyr 1.0.0 функция summarise()
была значительно доработана – теперь с её помощью можно получить фрейм произвольной размерности.
library(dplyr) # тестовые данные df <- tibble( grp = rep(1:2, each = 5), x = c(rnorm(5, -0.25, 1), rnorm(5, 0, 1.5)), y = c(rnorm(5, 0.25, 1), rnorm(5, 0, 0.5)), ) # получим минимальные и максимальные значения для каждой группы # и поместим эти значения в строки df %>% group_by(grp) %>% summarise(rng = range(x))
Этот и следующие обзоры подготовлены по серии статей создателя пакета – Хэдли Викхэма. Например, данное видео снято по материалам публикации dplyr 1.0.0: new summarise() features
Функции select(), rename_with(), relocate()
Функция select()
давно присутствует в пакете dplyr. Вместе с ней ранее использовались select_if()
и select_at()
. Теперь все три функции объединены внутри select()
. Аналогичным образом rename_with()
пришла на смену функциям rename()
, rename_at()
и rename_at()
. Наконец, relocate()
– это новая функция, позволяющая менять положение столбцов датафрейма:
# тестовые данные df2 <- tibble(x1 = 1, x2 = "a", x3 = 2, y1 = "b", y2 = 3, y3 = "c", y4 = 4) # выбрать числовые столбцы df2 %>% select(is.numeric) # выбрать НЕ текстовые столбцы df2 %>% select(!is.character) # переименовываем столбцы # функция rename_with df2 %>% rename_with(toupper) df2 %>% rename_with(toupper, starts_with("x")) df2 %>% rename_with(toupper, is.numeric) # relocate для изменения порядка стобцов df3 <- tibble(w = 0, x = 1, y = "a", z = "b") # переместить столбцы y, z в начало df3 %>% relocate(y, z) # переместить текстовые столбцы вначало df3 %>% relocate(is.character)
Источник: dplyr 1.0.0: select, rename, relocate.
Функция across()
Ещё одна новая функция – across()
– позволяет применять какую-либо функцию одновременно к ряду столбцов датафрейма:
library(dplyr) # тестовый датафрейм df <- tibble(g1 = as.factor(sample(letters[1:4],size = 10, replace = T )), g2 = as.factor(sample(LETTERS[1:3],size = 10, replace = T )), a = runif(10, 1, 10), b = runif(10, 10, 20), c = runif(10, 15, 30), d = runif(10, 1, 50)) # считаем среднее по столбцам от a до d df %>% group_by(g1, g2) %>% summarise(across(a:d, mean))
Источник: dplyr 1.0.0: working across columns.
Перебор строк: функция rowwise()
Функция rowwise()
– новая альтернатива циклам и функциям из пакета purrr
. Функция используется для строчного перебора датафрейма:
# тестовый дата фрейм df <- tibble( student_id = 1:4, test1 = 10:13, test2 = 20:23, test3 = 30:33, test4 = 40:43 ) # разбиваем по строкам rf <- rowwise(df, student_id) # считаем среднюю оценку по каждому студентам rf %>% mutate(avg = mean(c(test1, test2, test3, test4)))
Источник: dplyr 1.0.0: working within rows
Операции INSERT, UPDATE, DELETE
Перед самым релизом в dplyr 1.0.0 добавили семейство функций rows_*()
, с помощью которых в R можно выполнять SQL-операции INSERT
, UPDATE
, DELETE
.
Заключение
Номер версии 1.0.0 говорит, что синтаксис dplyr в дальнейшем не будет значительно меняться – даже если появятся новые функции и аргументы, написанный код будет иметь обратную совместимость.
Если представленные обзоры были полезны, можно подписаться на YouTube-канал автора или канал Telegram – основная часть контента посвящена урокам по языку R.