R:按项目平滑时间序列数据



我有一个数据系列,该数据系列随时间逐渐显示。购买习惯是不规则的,因此我想随着时间的推移和项目ID将这些数据弄平。

如果物品更定期下达订单(即每天),我们可以更好地绘制/评估我们的订购水平并设置库存水平。但是,有些人会购买过多的物品,因此他们不必补货。然后,这偏向我们的标准级数据(因为总共1天确实是一周的产品,因为它们每周只能订购一次。

可重复的示例:

POData <- structure(list(a = structure(c(1499918400, 1499918400, 1499918400, 
1499918400, 1499918400, 1499918400, 1496376000, 1497412800, 1497412800, 
1497412800, 1497412800, 1497412800, 1497240000, 1497412800, 1497412800, 
1497412800, 1501214400, 1496376000, 1496376000, 1496376000, 1496289600, 
1496289600, 1496289600, 1496289600, 1496289600, 1496289600, 1501214400, 
1501214400, 1501214400, 1501214400), class = c("POSIXct", "POSIXt"
), tzone = ""), b = c(446032L, 101612L, 37740L, 482207L, 152360L, 
4483L, 482207L, 141729L, 81192L, 482207L, 85273L, 142955L, 460003L, 
142955L, 17752L, 29763L, 309189L, 361905L, 17396L, 410762L, 437420L, 
17752L, 18002L, 150698L, 163342L, 433332L, 150587L, 44159L, 433332L, 
446032L), c = c(4, 1, 25, 1, 1, 1, 3, 12, 12, 1, 1, 1, 300, 1, 
1, 2, 6, 6, 2, 1, 1, 1, 1, 1, 1, 1, 40, 2, 1, 2)), .Names = c("PO Date", 
"PS Item ID", "PO Qty"), row.names = c(NA, 30L), class = "data.frame")

这可能是一个简单的问题,但我希望有人有一种简单的方法。

您可以使用类似的东西

require(zoo)
require(dply)
    df2 = POData %>%
  arrange(`PS Item ID`,`PO Date`)%>%
  group_by(`PS Item ID`)%>%
  mutate(temp_lag1 = lag( `PO Qty`))%>%
  mutate(temp.5.previous = rollapply(data = temp_lag1, 
                                     width = 2, 
                                     FUN = mean, 
                                     align = "left", 
                                     fill =  `PO Qty`, 
                                     na.rm = T))

它本质上按PS Item ID进行了分组,并通过PS Item IDPO Date进行安排。mutate中的width参数指定您想回去的平均值。到目前

最新更新