Получи случайную криптовалюту за регистрацию!

​​nplyr: Грамматика манипулирования вложенными данными Пакет | R4marketing | канал Алексея Селезнёва | Язык R

​​nplyr: Грамматика манипулирования вложенными данными

Пакет nplyr по функционалу схож со всем известным dplyr, но выполняет манипуляцию над вложенными столбцами-списками, не требуя из предварительного разворачивания. По сути nplyr является обёрткой над dplyr и имеет схожие функции, в названее которых добавлен префикс nest_. Ниже перечислены некоторые эквиваленты функций nplyr и dplyr.

● nest_mutate() - mutate()
● nest_select() - select()
● nest_filter() - filter()
● nest_summarise() - summarise()
● nest_group_by() - group_by()

На самом деле, в nplyr есть обёртки практически всех dplyr глаголов.

Далее рассмотрим несколько примеров, для их демонстрации мы возьмём набор данных о странах на каждом континенте из пакета gapminder, и свернём этот набор данных по континентам, сами данные по странам закинем во вложенный столбец country_data.

library(nplyr)

gm_nest <-
gapminder::gapminder_unfiltered %>%
tidyr::nest(country_data = -continent)

gm_nest
#> # A tibble: 6 × 2
#> continent country_data
#>
#> 1 Asia
#> 2 Europe
#> 3 Africa
#> 4 Americas
#> 5 FSU
#> 6 Oceania

Теперь с помощью nplyr мы можем производить манипуляции данными, не разворачивая столбец-список. В следующем примере мы получим данные о населении переведённые в миллионы человек, за максимальный год по каждой стране.

gm_nest %>%
nest_filter(country_data, year == max(year)) %>%
nest_mutate(country_data, pop_millions = pop/1000000) %>%
slice_head(n = 1) %>%
tidyr::unnest(country_data)

Последней операцией мы развернули столбец с вычислениями, для того, что бы убедиться в том, что столбец с численностью населения переведённый в миллионы был добавлен.

Для того, что бы вам было более понятно, тоже самое можно было сделать на чистом tidyverse предварительно развернув вложенный столбец country_data.

gm_nest %>%
tidyr::unnest(country_data) %>%
group_by(continent) %>%
filter(year == max(year)) %>%
mutate(pop_millions = pop/1000000) %>%
ungroup() %>%
filter(continent == "Asia")

Также nplyr поддерживает операции по группировке и агрегации данных:

gm_nest %>%
nest_group_by(country_data, year) %>%
nest_summarise(
country_data,
n = n(),
lifeExp = median(lifeExp),
pop = median(pop),
gdpPercap = median(gdpPercap)
)

Ссылки:
- примеры кода заимствованы из README
- ещё один интересный пример можно найти в виньетке "Use case for nplyr"

#заметки_по_R