首页 文章

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

提问于
浏览
2

我已经看到了许多解决方案来处理时间或日期组,比如 aggregate 将每日观察结果汇总到每周观察中,或其他计算移动平均线的解决方案,但我还没有找到方法做我想要的,哪个是从另一个变量键入的数据中提取相对日期 .

我有一堆商店的每日销售数据 . 这是一个带有列的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)在7天前和7天后取代每个商店' sales data with the average of the store'的销售额(忽略了第一次绕过其中一个数据点也缺失的情况),但我不知道如何写一个有效的 my_func 办法 .

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

1 回答

  • 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
        }
      )
    )
    

相关问题