我用的是 dplyr
和 rollmean
均线来计算13周移动平均线和增长率。以下是工作原理。
NEW_DATA <- DATA %>%
select(CAT, Inventory_Amount, Sales, Shipments, DATE)%>%
group_by(CAT, DATE)%>%
summarise(
INVENTORY = sum(Inventory_Amount),
SO = sum(Sale),
SI = sum(Shipments)
) %>%
arrange(CAT, DATE)%>%
mutate(SO_13WK_AVG = rollmean(x = SO, 13, align = "right", fill = NA ),
GROWTH = round(((SO - lag(SO, 52)) / lag(SO, 52)) *100,2))
这段代码增加了两个新的列 "SO_13WK_AVG" (13周销售平均数) 和增长 (销售的年增长率)
当我试图从原始数据框中选择一个额外的变量来包含在新的汇总数据框中时,正在创建的新变量的值都变成了NA。下面的代码为 SO_13WK_AVG 和 GROWTH 生成了 NA 值(我所做的只是选择了 "WK "变量。
NEW_DATA <- DATA %>%
select(CAT, Inventory_Amount, Sales, Shipments, DATE, WK)%>%
group_by(CAT, DATE, WK)%>%
summarise(
INVENTORY = sum(Inventory_Amount),
SO = sum(Sale),
SI = sum(Shipments)
) %>%
arrange(CAT, DATE)%>%
mutate(SO_13WK_AVG = rollmean(x = SO, 13, align = "right", fill = NA ),
GROWTH = round(((SO - lag(SO, 52)) / lag(SO, 52)) *100,2))
我在stackoverflow上搜索了一下,找到了一个似乎相关的线程。
这个帖子建议使用 na.rm = TRUE
从计算中删除NA值。然而,据我所知,我没有任何缺失值。任何帮助评论是感激的。
我刚刚解决了一个很类似的问题。如果不花更多的时间去思考,我不知道这是否能解决你的问题,但是我是通过两个变量来分组的,这两个变量占了整个数据集的所有变化(地点和星期)。因此,滚动平均值要么无法计算,要么只能创建填充值。不按 "周 "分组就解决了这个问题。由于 "WK "几乎可以肯定100%依赖于 "Date",我希望你也有同样的问题。请记住,"summaryise "会将最后一个分组变量从分组中删除。试着在总结之前先按WK分组,然后在没有星期或日期的情况下重新分组。
顺便说一句,我相信你已经想通了,因为这已经是近两年前的事了,但我想其他人也会遇到这个问题,毕竟这也是我来问这个问题的原因)。