R

时间:2018-02-23 04:50:15

标签: r dplyr moving-average

我有一个相对较大的数据集(超过1000个数据集并且正在增长),每个人都有一个ID代码,每个人的日期和度量值(有一些缺失值)。

我希望在每个日期为每个ID添加一个简单移动平均值的列,理想情况是通过一个函数我可以为移动平均线的多个日期窗口重现它(5天,20天) - 等等)

使用此处回答的另一个滚动平均问题的答案,如果我将数据子集化为单个ID,则此解决方案有效:

rollavgbyperiod <- function(i,window){
  startdate <- dates[i]-window
  enddate <- dates[i]
  interval <- seq(startdate,enddate,1)

  tmp <- df[dates %in% interval,"metric"]
  return(mean(tmp$metric))
}

dates <- as.Date(df$date)
window <- 5
Roll.Av <- sapply(1:length(df$date),function(m) rollavgbyperiod(m,window))
Roll.Av[is.nan(Roll.Av)] <- NA

我的想法是使用上面的函数在group_by(df,ID)之后使用dplyr汇总,但我无法找到一个有效的解决方案。

我的另一种方法是尝试通过ID将df拆分为列表,然后在该列表上使用lapply,然后将该列表恢复为一个df,但这似乎是一个麻烦的解决方案,并且再次 - 找不到工作方案。

作为添加的上下文,我将这些数据从AzureSQL表中提取出来,这就是为什么我不能将它留在列表中(此表的其他用途,如PowerBI - 据我所知,需要如果我错了,请纠正我。

0 个答案:

没有答案