R:按项

时间:2017-10-03 14:18:30

标签: r smoothing

我有一个数据系列,按项目ID显示一段时间内的购买情况。购买习惯是不规则的,所以我希望随着时间的推移和项目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")

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

1 个答案:

答案 0 :(得分:0)

你可以使用这样的东西

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排列。 width中的mutate参数指定了您希望返回移动平均线的距离。截至目前,它已设置为1,因为您的数据不是产品ID那么广泛。