Примите список списков, которые могут быть, например, представлять рынки за периоды времени. У нас есть шесть периодов и в каждом периоде одни и те же три рынка. Для каждого рынка может быть много переменных. Здесь нас интересуют profit
и sales
. Мы хотим рассчитать среднее значение для каждого за все периоды и для всех рынков.
Вот набор данных игрушек:
periods <- list()
markets <- list()
set.seed(11)
for (i in seq(1:6)) {
for (j in seq(1:3)) {
markets[[j]] <- list(profit = sample(1:100, 1), sales = sample(1:10, 1))
}
periods[[i]] <- markets
}
Вот некоторые фактические данные:
list(list(list(profit = 28L, sales = 1L), list(profit = 52L,
sales = 1L), list(profit = 7L, sales = 10L)), list(list(profit = 9L,
sales = 3L), list(profit = 89L, sales = 2L), list(profit = 18L,
sales = 5L)), list(list(profit = 91L, sales = 9L), list(profit = 74L,
sales = 6L), list(profit = 49L, sales = 4L)), list(list(profit = 16L,
sales = 5L), list(profit = 21L, sales = 7L), list(profit = 37L,
sales = 4L)), list(list(profit = 7L, sales = 5L), list(profit = 40L,
sales = 1L), list(profit = 13L, sales = 4L)), list(list(profit = 51L,
sales = 4L), list(profit = 42L, sales = 3L), list(profit = 82L,
sales = 7L)))
Ожидаемый результат:
profit == 40,33
sales == 4,5
Теперь я могу добиться этого, используя цикл. Но мне бы очень хотелось увидеть более элегантное решение. Предпочтительно с tidyverse
. Для простого списка значений я мог бы использовать что-то вроде periods %>% map('sales') %>% unlist() %>% mean()
. Тем не менее, я потерпел неудачу в этом более сложном случае.