Получить сумму / среднее в мурлыкании по подмножеству data.frame - PullRequest
0 голосов
/ 31 января 2019

Я хотел бы найти сумму по вхождениям, а затем среднее из этих сумм по симуляциям в следующем:

library(tidyverse)

set.seed(123)

s <- 2

data <- data.frame(
lamda = c(5, 2, 3),
meanlog = c(9, 10, 11), 
sdlog = c(2, 2.1, 2.2))


    data2 <- data %>%
  mutate(freq = map(lamda, ~rpois(s, .x)),
         freqsev = map(freq, ~map(.x, function(k) rlnorm(k, meanlog, sdlog))))

Я хотел бы взять сумму частот, а затем среднее из суммыЧасто задаваемые вопросы по измерению (ям): есть идеи, как этого достичь?Спасибо!

data3 <- data2 %>% 
  mutate(sum-freqsev = ???
         mean-sum-freqsev = ???)

Ожидаемые размеры:

data2 - это фрейм данных с 3 строками (например, на lamda)

sum-freqsev должен быть список <int [2]>, то есть сумма записей в freqsev.mean-sum-freqsev должно быть числом, просто среднее значение sum-freqsev за lamda

1 Ответ

0 голосов
/ 01 февраля 2019

Мы можем использовать вложенный map для поиска sum_freqsev и одиночный map для поиска mean_sum_freqsev:

library(tidyverse)

data3 <- data2 %>% 
  mutate(sum_freqsev = freqsev %>% map(~map_dbl(., sum)),
         mean_sum_freqsev = sum_freqsev %>% map_dbl(mean),
         percentile = freqsev %>% map(~map(., ~quantile(.x, c(.50, .90)))))

Внутренний map_dbl суммирует записи freqsev закаждое моделирование и возвращает вектор типа double вместо списка с двумя элементами.

mean_sum_freqsev вычисляется путем взятия mean каждого элемента списка (вектора) sum_freqsev и возврата двойного.

Вывод:

> as.tibble(data3)
# A tibble: 3 x 8
  lamda meanlog sdlog freq      freqsev    sum_freqsev mean_sum_freqsev percentile
  <dbl>   <dbl> <dbl> <list>    <list>     <list>                 <dbl> <list>    
1     5       9   2   <int [2]> <list [2]> <dbl [2]>           1493880. <list [2]>
2     2      10   2.1 <int [2]> <list [2]> <dbl [2]>            623586. <list [2]>
3     3      11   2.2 <int [2]> <list [2]> <dbl [2]>             15219. <list [2]>

> data3 %>% pull(percentile)
[[1]]
[[1]][[1]]
      50%       90% 
  24633.8 1832533.5 

[[1]][[2]]
      50%       90% 
 22461.18 114075.74 

[[2]]
[[2]][[1]]
     50%      90% 
470808.0 845321.7 

[[2]][[2]]
      50%       90% 
 12539.82 202665.48 

[[3]]
[[3]][[1]]
      50%       90% 
 3906.931 10100.830 

[[3]][[2]]
50% 90% 
 NA  NA 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...