【问题标题】:How to sum over rows above restarting at each ID in R [duplicate]如何总结以上在R中每个ID处重新启动的行[重复]
【发布时间】:2019-04-19 13:21:36
【问题描述】:

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

我对 R 比较陌生,但我确信这可以很容易地完成。

我的数据格式如下:

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 列,这样:

╔════════════╦═══╦════╗
║ 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 ║
╚════════════╩═══╩════╝

最有效的方法是什么?

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    使用avecumsum。没有使用任何包。

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

    【讨论】:

      【解决方案2】:

      您可以使用dplyr 包:

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

      【讨论】:

        猜你喜欢
        • 2021-01-09
        • 2021-06-29
        • 2020-05-17
        • 2023-01-31
        • 1970-01-01
        • 2020-12-16
        • 1970-01-01
        • 2016-02-13
        • 1970-01-01
        相关资源
        最近更新 更多