每组R尾随cumsum

时间:2017-07-12 07:21:37

标签: r apply cumsum

我需要计算R中每组的运行cumsum,但是对于cumsum的窗口必须只是最后3个观察结果:

例如,如果我有一张带有人名的表格,日期和分数如下:

   Name       Date Score
1  John 2017-01-01     4
2  John 2017-01-02     5
3  John 2017-01-03     3
4  John 2017-01-04     1
5  John 2017-01-05     4
6  John 2017-01-06     4
7   Ben 2017-01-01     4
8   Ben 2017-01-02     4
9   Ben 2017-01-03     5
10  Ben 2017-01-04     2
11  Ben 2017-01-05     3
12  Ben 2017-01-06     4
13  Ben 2017-01-07     4
14  Ben 2017-01-08     4

我想添加一个“自定义cumsum”列,其中包含了最近三天的积分(每组),即我希望得到以下结果:

   Name       Date Score Special_cum_sum
1  John 2017-01-01     4               4
2  John 2017-01-02     5               9
3  John 2017-01-03     3              12
4  John 2017-01-04     1               9
5  John 2017-01-05     4               8
6  John 2017-01-06     4               9
7   Ben 2017-01-01     4               4
8   Ben 2017-01-02     4               8
9   Ben 2017-01-03     5              13
10  Ben 2017-01-04     2              11
11  Ben 2017-01-05     3              10
12  Ben 2017-01-06     4               9
13  Ben 2017-01-07     4              11
14  Ben 2017-01-08     4              12

1 个答案:

答案 0 :(得分:3)

您可以将动画片rollapply与dplyrs group_by和mutate结合使用:

library(zoo)
library(dplyr)
?rollapply
Data <- Data %>% group_by(Name) %>%
     mutate(Special_cum_sum = rollapply(Score, 3, sum, align = "right", partial = T))