R - 如何根据日期范围对列进行求和?

时间:2015-07-27 20:47:05

标签: r date dataframe sum

假设我有这样的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总和(这不是最后一行),基本上我选择任何一天作为参考日,然后计算滚动总和。

1 个答案:

答案 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个而不是它自己的行。