R中重复组时如何计算每组的累积和?

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

我有一个

dataframe
代表带有 ID 和时间的
paneldata
。对于每个 ID 和年份,我喜欢计算累计总和。但是id和时间组是重复的。

df <- data.frame(id = rep(12345,15),
                 year = c(rep(2021,5), rep(2022,5), rep(2023,5)), 
                 value = c(rep(5,5), rep(3,5), rep(4,5)))

df

      id year value
1  12345 2021     5
2  12345 2021     5
3  12345 2021     5
4  12345 2021     5
5  12345 2021     5
6  12345 2022     3
7  12345 2022     3
8  12345 2022     3
9  12345 2022     3
10 12345 2022     3
11 12345 2023     4
12 12345 2023     4
13 12345 2023     4
14 12345 2023     4
15 12345 2023     4

所以代替这个

df %>% 
  group_by(id, year) %>% 
  mutate(value_cumsum = cumsum(value))

# A tibble: 15 × 4
# Groups:   id, year [3]
      id  year value value_cumsum
   <dbl> <dbl> <dbl>        <dbl>
 1 12345  2021     5            5
 2 12345  2021     5           10
 3 12345  2021     5           15
 4 12345  2021     5           20
 5 12345  2021     5           25
 6 12345  2022     3            3
 7 12345  2022     3            6
 8 12345  2022     3            9
 9 12345  2022     3           12
10 12345  2022     3           15
11 12345  2023     4            4
12 12345  2023     4            8
13 12345  2023     4           12
14 12345  2023     4           16
15 12345  2023     4           20

我需要

value_cumsum
为 5, 5, 5, 5, 5, 8, 8, 8, 8, 8, 12, 12, 12, 12, 12。

r tidyverse cumsum
1个回答
1
投票

你可以试试

df %>%
    mutate(value_cumsum = value * !duplicated(value), .by = c("id", "year")) %>%
    mutate(value_cumsum = cumsum(value_cumsum))

df %>%
    distinct() %>%
    mutate(value_cumsum = cumsum(value)) %>%
    right_join(df)

这给出了

      id year value value_cumsum
1  12345 2021     5            5
2  12345 2021     5            5
3  12345 2021     5            5
4  12345 2021     5            5
5  12345 2021     5            5
6  12345 2022     3            8
7  12345 2022     3            8
8  12345 2022     3            8
9  12345 2022     3            8
10 12345 2022     3            8
11 12345 2023     4           12
12 12345 2023     4           12
13 12345 2023     4           12
14 12345 2023     4           12
15 12345 2023     4           12
© www.soinside.com 2019 - 2024. All rights reserved.