使用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
,那么它会流向整个项目。 谢谢你的帮助!