R计算data.frame中滞后变量的总和

时间:2015-12-16 15:51:13

标签: r variables sum lag

我想使用基数R计算data.frame中t-12到t-1之间变量的总和。例如,在下面的代码中,我试图计算从MONTH t-的HOURS总和12至月T-1(由NAME提供)。非常感谢任何帮助。

DF <- data.frame(c(expand.grid(NAME = c("Frank", "Tony", "Edward"), YEAR = c(2014:2015), MONTH = c(1:12))), HOURS = rnorm(72))

DF <- DF[with(DF, order(NAME, YEAR, MONTH)), ]

DF

DF <- within(DF, WORK <- sum(c(rep(NA, 1), head(HOURS, -1)):c(rep(NA, 12), head(HOURS, -12))))

2 个答案:

答案 0 :(得分:2)

使用dplyrRcppRoll

library(RcppRoll)
library(dplyr)
DF %>% group_by(NAME) %>%
       arrange(YEAR, MONTH) %>%
       mutate(sum = c(NA, roll_sum(HOURS, 12, fill = NA, align = "right"))[-n()])

答案 1 :(得分:2)

这是一个基本的R方法(至少在不使用dplyr进行分组或链接方面,但仍然使用包来进行滚动总和)。我使用了zoo包的rollsum功能,但是,根据@ jeremycg的回答,您也可以使用roll_sum中的RcppRoll。如果您甚至不想使用包裹作为滚动金额,您可以根据自己的意愿推出自己的功能(无双关语)。

library(zoo)

DF = DF[order(DF$NAME, DF$YEAR, DF$MONTH),]  

DF$sum = unlist(lapply(unique(DF$NAME), function(x) {
  c(NA, rollsum(DF$HOURS[DF$NAME==x], 12, na.pad=TRUE, align="right")[-length(DF$NAME[DF$NAME==x])])
}))