关于数据框:如何对以上各行求和,以R中的每个ID重新启动

How to sum over rows above restarting at each ID in R

本问题已经有最佳答案,请猛点这里访问。

我正在使用面板数据,并且希望总结不同时间段内每个实体(ID)的信息。

我对R相当陌生,但是我敢肯定,这很容易做到。

我的数据格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mydata <- structure(list(company_id = c(1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3,
3, 3, 3, 3, 3), A = c(3, 3, 3, 3, 4, 4, 4, 4, 4, 6, 6, 6, 6,
6, 6, 6), B = c(3, 6, 9, 12, 4, 8, 12, 16, 20, 6, 12, 18, 24,
30, 36, 42)), .Names = c("company_id","A","B"), row.names = c(NA,
-16L), class = c("tbl_df","tbl","data.frame"))

# A tibble: 16 x 2
   company_id     A
        <dbl> <dbl>
 1          1     3
 2          1     3
 3          1     3
 4          1     3
 5          2     4
 6          2     4
 7          2     4
 8          2     4
 9          2     4
10          3     6
11          3     6
12          3     6
13          3     6
14          3     6
15          3     6
16          3     6

我想要的输出将是添加列B,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
╔════════════╦═══╦════╗
║ company_id ║ A ║ B  ║
╠════════════╬═══╬════╣
║          1 ║ 3 ║  3 ║
║          1 ║ 3 ║  6 ║
║          1 ║ 3 ║  9 ║
║          1 ║ 3 ║ 12 ║
║          2 ║ 4 ║  4 ║
║          2 ║ 4 ║  8 ║
║          2 ║ 4 ║ 12 ║
║          2 ║ 4 ║ 16 ║
║          2 ║ 4 ║ 20 ║
║          3 ║ 6 ║  6 ║
║          3 ║ 6 ║ 12 ║
║          3 ║ 6 ║ 18 ║
║          3 ║ 6 ║ 24 ║
║          3 ║ 6 ║ 30 ║
║          3 ║ 6 ║ 36 ║
║          3 ║ 6 ║ 42 ║
╚════════════╩═══╩════╝

最有效的方法是什么?


使用avecumsum。不使用任何软件包。

1
transform(my_data, B = ave(A, company_id, FUN = cumsum))

您可以使用dplyr软件包:

1
2
3
4
5
library(dplyr)

my_data %>%
  group_by(company_id) %>%
  mutate(B = cumsum(A))