面板数据的增量求和值

Sum values incrementally for panel data

我有一个非常基本的问题,因为我对 R 比较陌生。我想知道如何分别为我的数据中的每个横截面单元将特定列中的值添加到前一列中。我的数据如下所示:

firm date value 
A    1    10
A    2    15
A    3    20 
A    4    0
B    1    0
B    2    1
B    3    5
B    4    10
C    1    3
C    2    2
C    3    10
C    4    1
D    1    7
D    2    3
D    3    6
D    4    9

而且我想实现下面的数据。所以我想对每个横截面单元的值进行增量求和。

firm date value cumulative value
A    1    10    10
A    2    15    25
A    3    20    45
A    4    0     45
B    1    0     0
B    2    1     1
B    3    5     6
B    4    10    16
C    1    3     3
C    2    2     5
C    3    10    15
C    4    1     16
D    1    7     7
D    2    3     10
D    3    6     16
D    4    9     25

下面是一个可重现的示例代码。我尝试了 lag() 但无法弄清楚如何为每个公司重复它。

firm <- c("A","A","A","A","B","B","B","B","C","C","C", "C","D","D","D","D")
date <- c("1","2","3","4","1","2","3","4","1","2","3","4", "1", "2", "3", "4")
value <- c(10, 15, 20, 0, 0, 1, 5, 10, 3, 2, 10, 1, 7, 3, 6, 9)
data <- data.frame(firm = firm, date = date, value = value)

这个有用吗:

library(dplyr)

df %>% group_by(firm) %>% mutate(cumulative_value = cumsum(value))
# A tibble: 16 x 4
# Groups:   firm [4]
   firm   date value cumulative_value
   <chr> <int> <int>            <int>
 1 A         1    10               10
 2 A         2    15               25
 3 A         3    20               45
 4 A         4     0               45
 5 B         1     0                0
 6 B         2     1                1
 7 B         3     5                6
 8 B         4    10               16
 9 C         1     3                3
10 C         2     2                5
11 C         3    10               15
12 C         4     1               16
13 D         1     7                7
14 D         2     3               10
15 D         3     6               16
16 D         4     9               25

base Rave

结合使用
data$cumulative_value <- with(data, ave(value, firm, FUN = cumsum))

-输出

> data
   firm date value cumulative_value
1     A    1    10               10
2     A    2    15               25
3     A    3    20               45
4     A    4     0               45
5     B    1     0                0
6     B    2     1                1
7     B    3     5                6
8     B    4    10               16
9     C    1     3                3
10    C    2     2                5
11    C    3    10               15
12    C    4     1               16
13    D    1     7                7
14    D    2     3               10
15    D    3     6               16
16    D    4     9               25