Один из вариантов - сгруппировать по 'YEAR', 'SECTOR', сохранить подмножество fivenum
в tibble
, unnest
, а затем spread
в широкоформатном формате
library(dplyr)
library(tidyr)
df1 %>%
group_by(YEAR, SECTOR) %>%
group_map(~ .x %>%
summarise(val = list(tibble(categ = c('1st quart', 'median', '3rd quart'),
val = fivenum(VALUE)[2:4])))) %>%
unnest %>%
spread(categ, val)
# A tibble: 4 x 5
# Groups: YEAR, SECTOR [4]
# YEAR SECTOR `1st quart` `3rd quart` median
# <int> <chr> <dbl> <dbl> <dbl>
#1 2016 A 7.5 150 35
#2 2016 B 100 2000 500
#3 2017 A 76 1501 351
#4 2017 B 751 12501 2001
данные
df1 <- structure(list(YEAR = c(2016L, 2016L, 2016L, 2016L, 2016L, 2016L,
2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L,
2016L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L,
2017L, 2017L, 2017L, 2017L, 2017L, 2016L, 2017L, 2017L), SECTOR = c("A",
"A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B",
"B", "B", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B",
"B", "B", "B", "B", "B"), VALUE = c(2L, 5L, 10L, 20L, 50L, 100L,
200L, 300L, 20L, 50L, 100L, 200L, 500L, 1000L, 2000L, 3000L,
21L, 51L, 101L, 201L, 501L, 1001L, 2001L, 3001L, 201L, 501L,
1001L, 2001L, 5001L, 10001L, 20001L, 30001L)), class = "data.frame",
row.names = c(NA,
-32L))