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 ║ ╚════════════╩═══╩════╝ |
最有效的方法是什么?
使用
1 | transform(my_data, B = ave(A, company_id, FUN = cumsum)) |
您可以使用
1 2 3 4 5 | library(dplyr) my_data %>% group_by(company_id) %>% mutate(B = cumsum(A)) |