嵌套列表中的累计和

问题描述 投票:0回答:2

我有一个带有一个嵌套列表列的大标题。嵌套列表列的每个元素都有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(13,24)),
c = c(1,1, 2, 2))

尝试了下面的语法,但是它显然是错误的

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

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

任何帮助,我们将不胜感激。我可以潜在地散布数据并跨列添加,但这会很慢

r
2个回答
0
投票

我认为您正在寻找以下内容,尽管它与最后两个值的期望输出不匹配(可以检查是否正确):

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

1
投票

一个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
© www.soinside.com 2019 - 2024. All rights reserved.