我有一个值为
的表格KId sales_month quantity_sold
100 1 0
100 2 0
100 3 0
496 2 6
511 2 10
846 1 4
846 2 6
846 3 1
338 1 6
338 2 0
现在我需要输出
KId sales_month quantity_sold result
100 1 0 1
100 2 0 1
100 3 0 1
496 2 6 1
511 2 10 1
846 1 4 1
846 2 6 1
846 3 1 0
338 1 6 1
338 2 0 1
此处,如果3月份(3)的销售数量低于1月(1)和2月(2)的两个月的 60%,则计算必须如此结果应为 1 ,否则应显示 0 。需要解决方案才能执行此操作。
提前致谢。
答案 0 :(得分:1)
如果我理解的话,您的要求是将第t个月的销售数量与t-1和t-2个月的销售数量进行比较。如果是这样,我可以建议使用dplyr包,它提供了在数据框中对行和变异列进行分组的好功能。
resultData <- group_by(data, KId) %>%
arrange(sales_month) %>%
mutate(monthMinus1Qty = lag(quantity_sold,1), monthMinus2Qty = lag(quantity_sold, 2)) %>%
group_by(KId, sales_month) %>%
mutate(previous2MonthsQty = sum(monthMinus1Qty, monthMinus2Qty, na.rm = TRUE)) %>%
mutate(result = ifelse(quantity_sold/previous2MonthsQty >= 0.6,0,1)) %>%
select(KId,sales_month, quantity_sold, result)
添加
select(KId,sales_month, quantity_sold, result)
最后让我们只显示我们关心的列(而不是所有这些中间步骤)。
我相信这应该满足你的要求。 NA是结果列,由于0/0分区或前几个月没有数据。 如果需要将计算扩展到一个日历年之后,可以添加年份列并适当调整group_by()参数。 有关dplyr包的更多信息,请关注this link