在R中计算滑动时间间隔(7天前/后)的平均值

时间:2014-05-12 05:07:16

标签: r

我已经看到很多解决方案与时间或日期组合工作,例如aggregate将每日观察结果汇总到每周观察结果中,或其他解决方案来计算移动平均线,但我没有&#39 ;找到了我想要的方法,即从另一个变量键入的数据中提取相对日期。

我有一堆商店的每日销售数据。这是一个带有列

的data.frame
store_id date sales

它已接近完成,但有一些缺失的数据点,那些缺失的数据点对我们的模型产生了很大的影响(我怀疑)。所以我使用expand.grid来确保每个商店和每个日期都有一行,但此时这些缺失数据点的销售数据是NA。我找到了像

这样的解决方案
dframe[is.na(dframe)] <- 0

dframe$sales[is.na(dframe$sales)] <- mean(dframe$sales, na.rm = TRUE)

但我对其中任何一个的RHS都不满意。我想用最佳估计值替换缺失的销售数据,并且给定日期的给定商店的最佳销售估算值是7天前和7天后的销售额的平均值。例如。对于星期日的8日,星期日的平均值是1日和星期日的15日,因为销售额明显取决于星期几。

所以我想我可以使用

dframe$sales[is.na(dframe$sales)] <- my_func(dframe)

其中my_func(dframe)取代了每个商店&#39; 7天前和7天后商店销售额平均值的销售数据(忽略第一次出现那些数据点之一的情况也不见了),但我有不知道如何以有效的方式写my_func

如何在不使用非常低效的for循环的情况下,在7天前和未来匹配store_id和日期?优选仅使用基础R包装。

1 个答案:

答案 0 :(得分:0)

类似的东西:

with(
  dframe, 
    ave(sales, store_id, FUN=function(x) {
      naw <- which(is.na(x))
      x[naw] <- rowMeans(cbind(x[naw+7],x[naw-7]))
      x
    }
  )
)