我正在使用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,发现一个似乎相关的线程:
Group/Mutate only returns NA and not an average
该线程建议使用na.rm = TRUE
从计算中删除NA值。但是据我所知,我没有任何缺失的值。任何帮助/评论表示赞赏。
答案 0 :(得分:0)
我刚刚解决了一个非常相似的问题。无法确切地说出它是否可以解决您的问题,而不用花费更多的时间思考它,但是我是根据两个变量进行分组的,这两个变量构成了我的数据集(位置和周)的所有变化。因此,滚动平均值要么无法计算,要么只能创建填充值。不按“周”分组解决了该问题。由于“ WK”几乎可以肯定100%依赖于“ Date”,因此我希望您也遇到同样的问题。请记住,“摘要”会删除分组中的最后一个分组变量。总结之前,请尝试按WK分组,然后重新分组而没有星期或日期。
(顺便说一句,自从大约两年前,我敢肯定您已经弄清楚了,但是我想其他人也会遇到这个,毕竟,这就是为什么我问这个问题。)