我有一个数据系列,按项目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")
这可能是一个简单的问题,但我希望有人有一个简单的方法来做到这一点。
答案 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 ID
和PO Date
排列。 width
中的mutate
参数指定了您希望返回移动平均线的距离。截至目前,它已设置为1,因为您的数据不是产品ID那么广泛。