首页 > 解决方案 > 如何计算分组滚动坡度

问题描述

我有一个以下列的数据框:客户、月份、活动/非活动、总销售额($)。活动/非活动 - 如果特定月份的销售额 > 0,则为 1,否则为 0。我想根据每个客户是否活跃计算滚动斜率。例如,如果他在 1 月至 3 月活跃,然后在 4 月不活跃,然后在 5 月至 12 月再次活跃,那么直到 3 月的每一行都将显示他的销售额到该月的滚动斜率,然后在 4 月为 0,然后是新的滚动斜率斜率表明他在 5 月 - 12 月的活动(忽略之前发生的事情)。

我知道它可能涉及 rollapply() 或 ave(),但仅此而已。提前致谢!

遵循预期结果的示例

structure(list(X = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 

1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Alex", "Michael"), class = "因子"), 月 = 结构(c(5L, 4L, 8L, 1L, 9L, 7L, 6L, 2L, 12L, 11L, 10L, 3L, 5L, 4L, 8L, 1L, 9L, 7L, 6L, 2L, 12L, 11L, 10L, 3L), .Label = c("Apr-18", "Aug-18", "Dec-18", "Feb-18", "Jan-18", "Jul-18", “Jun-18”、“Mar-18”、“May-18”、“Nov-18”、“Oct-18”、“Sep-18”),类 =“因子”),活动 = c(1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L), 销售.. .. = c(12L, 71L, 83L, 0L, 77L, 22L, 32L, 69L, 81L, 98L, 84L, 73L, 24L, 85L, 0L, 0L, 89L, 53L, 66L, 0L, 0L, 35L, 67L , 13L), Expected_Rolling_Slope = c(0, 1.9, 1.22, 0, 0, -1.77, -0.74,-0.05, 0.18, 0.3, 0.26, 0.19, 0.19, 0.11, 0, 0, 0, -1.16, -0.38, 0, 0, 0, 1.03, -0.35)), class = "data.frame", 行。名称 = c(NA, -24L))

标签: r

解决方案


推荐阅读