最后X天的总和时,“天” <= X(Sum of last X days for when “

2019-09-28 21:40发布

使用dplyr::lag ,我可以很容易地计算出一段时间内场的最后n值的总和。 出现的一个问题,然而,对于所计算的场的第一n行。 服用的前4天的每一天的总和的例子:

# Load dplyr
library(dplyr)

# Create data frame
day <- 1:7
set.seed(123)
value <- round(rnorm(7,20,10))
df <- data.frame(day,value)

# Function to sum last i values of column x (using dplyr::lag)
rollag <- function(x, i){
  lagsum = 0
  for(u in 1:i){
    lagsum = lagsum + lag(x,u)
  }
  lagsum
}

# Create column for sum of last 4 values of `value`
dfm <- mutate(df, Last4 = rollag(value,4))

这将创建如下表dfm

   day value Last4
1    1    14    NA
2    2    18    NA
3    3    36    NA
4    4    21    NA
5    5    21    89
6    6    37    96
7    7    25   115

正如你所看到的,在代码正确计算所有天前4个值> 4.我想要的是天2,3,4是事先1,2,3天的总和,使所有的行向具有值填充在除1(因为没有前1天的值)。 我可以通过执行更新每个值dfm$Last4[4] = rollag(dfm$value,3)[4]但将是乏味的。

我宁愿做的任何更改rollag功能,因为我用这个功能在我的整个项目一吨。 如果存在一个解决方案rollag ,那么它会流向整个项目。 谢谢你的帮助!

文章来源: Sum of last X days for when “day” <= X
标签: r dplyr