假设我有这样的df1:
Date Var1
01/01/2015 1
01/02/2015 4
....
07/24/2015 1
07/25/2015 6
07/26/2015 23
07/27/2015 15
Q1:2015年7月27日前3天Var1的总和(不包括7/27)。
Q2:2015年7月25日前3天的Var1总和(这不是最后一行),基本上我选择任何一天作为参考日,然后计算滚动总和。
答案 0 :(得分:0)
根据@SeñorO引用的链接中的一条评论中的建议,您可以使用zoo::rollsum
进行一些工作:
library(zoo)
set.seed(42)
df <- data.frame(d=seq.POSIXt(as.POSIXct('2015-01-01'), as.POSIXct('2015-02-14'), by='days'),
x=sample(20, size=45, replace=T))
k <- 3
df$sum3 <- c(0, cumsum(df$x[1:(k-1)]),
head(zoo::rollsum(df$x, k=k), n=-1))
df
## d x sum3
## 1 2015-01-01 16 0
## 2 2015-01-02 12 16
## 3 2015-01-03 15 28
## 4 2015-01-04 15 43
## 5 2015-01-05 17 42
## 6 2015-01-06 10 47
## 7 2015-01-07 11 42
0, cumsum(...)
是预先填充被忽略的前两行(rollsum(x, k)
返回长度为length(x)-k+1
的向量)。 head(..., n=-1)
丢弃最后一个元素,因为你说第n个条目应该是前3个而不是它自己的行。