我使用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周销售额平均值)和Growth (销售额的YoY增长率)
当我尝试从原始数据框中选择一个额外的变量以包含在新的汇总数据框中时,正在创建的新变量的值都变成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,其中一个发现了一个看起来相关的线程:
Group/Mutate only returns NA and not an average
此线程建议使用na.rm = TRUE从计算中删除NA值。但是,据我所知,我没有任何缺失值。任何帮助/评论都是非常感谢的。
发布于 2020-05-12 05:08:17
我刚刚解决了一个非常类似的问题。如果不花更多的时间思考,我不能完全判断它是否能解决你的问题,但我是按照两个变量进行分组的,这两个变量解释了我的数据集(位置和周)的所有变化。因此,滚动平均值要么无法计算,要么只能创建填充值。不按“星期”分组解决了这个问题。由于"WK“几乎100%依赖于"Date",我想你也会遇到同样的问题。记住,"summarise“从分组中删除最后一个分组变量。尝试在总结之前按WK分组,然后不带周或日期进行重新分组。
(顺便说一句,我相信你已经弄明白了一些事情,因为这已经是两年前的事了,但我想其他人也会遇到这个问题,毕竟,这就是我提出这个问题的原因。)
https://stackoverflow.com/questions/51525561
复制相似问题