Накопительная сумма по вложенному списку - PullRequest
1 голос
/ 08 апреля 2020

У меня большой столбик с одним столбцом вложенного списка. Каждый элемент столбца вложенного списка имеет 10 000 итераций, и я хотел бы применить кумулятивную сумму для этих итераций с помощью переменной группировки.

Я создал минимальный воспроизводимый пример ниже

tibble(a = list(c(1,2),c(3,4), c(5,6), c(7,8)),
c = c(1,1, 2, 2))

Предполагаемый результат должен быть

tibble(a = list(c(1,2),c(4,6), c(5,6), c(12,14)),
c = c(1,1, 2, 2))

Попробовал следующий синтаксис, но он явно неправильный

x <- tibble(a = list(c(1,2),c(4,6), c(5,6), c(7,8)),
c = c(1,1, 2, 2))

x %>% 
group_by(c) %>%
mutate(a = map(a,cumsum))

Любая помощь очень ценится. Я могу потенциально распределить данные и добавить по столбцам, но это будет медленно

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Один base R параметр может быть:

with(tbl, ave(a, c, FUN = function(x) Reduce(`+`, x, accumulate = TRUE)))

[[1]]
[1] 1 2

[[2]]
[1] 4 6

[[3]]
[1] 5 6

[[4]]
[1] 12 14
0 голосов
/ 08 апреля 2020

Я думаю, что вы ищете следующее, хотя оно не соответствует желаемому выводу для последних двух значений (можете проверить, что они правильные):

library(dplyr)
library(purrr)
library(tidyr)

df %>%
  group_by(c) %>%
  mutate(x = accumulate(a, `+`)) %>%
  unnest(cols = c(a, x))

# A tibble: 8 x 3
# Groups:   c [2]
      a     c     x
  <dbl> <dbl> <dbl>
1     1     1     1
2     2     1     2
3     3     1     4
4     4     1     6
5     5     2     5
6     6     2     6
7     7     2    12
8     8     2    14
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...