【发布时间】:2018-06-08 18:09:41
【问题描述】:
我有一个复杂的问题,因此感谢您的耐心等待。
对于每个数据点,我想首先从滞后列和前导列中捕获值,然后在我的数据集的系列中识别这些值,并使用每个组的捕获值计算中值。
Group,Date,Month,Sales,lag,lead
Group1,42005,1,2503,0,2
Group1,42036,2,3734,0,2
Group1,42064,3,6631,2,3
Group1,42095,4,8606,0,0
Group1,42125,5,1889,0,2
Group1,42156,6,4819,1,2
Group1,42186,7,3294,1,0
Group1,42217,8,38999,2,0
Group1,42248,9,28372,1,0
Group1,42278,10,25396,4,1
Group1,42309,11,21093,1,0
Group2,42339,1,9263,0,3
Group2,42005,2,6660,1,3
Group2,42036,3,28595,2,2
Group2,42064,4,123,2,0
Group2,42095,5,11855,3,3
Group2,42125,6,15845,4,3
Group2,42156,7,32331,2,2
Group2,42186,8,3188,1,1
Group2,42217,9,38161,4,0
例如,如果我们查看 Group1 的第 6 个月,Sales 值为 4819,lag 和lead 值分别为 1 和 2。 我想首先捕获滞后值和超前值,然后在系列中进行 vlookup。对于 4819,对于滞后(值 = 1),我想直到 4819 以上的一个数据点,(即 1889,a.k.a 4819-> 1889,同样对于领先(值 = 2),我想直到两个数据点低于 4891,即 3294 和 38999。所以现在捕获 4819 数据点的点是 1899、4819、3294 和 38999,因此现在我想取其中值,并将其存储在我的输出中。这个练习我想为每个组做。
同样,对于第 2 组第 4 个月,我想参考 123 捕获前 2 个滞后数据点(领先为零,因此不会被捕获),并取总 3 个值的中位数。
我在一个带有 ifelse 条件的特殊情况下尝试了相同的方法,看看它是如何工作的。
df$output
结果非常令人惊讶。 R 取列的所有值的中位数。另一个问题是即使它有效,我也必须编写多个 ifelse 条件,因此寻找更简单的解决方案。
不确定如何解决问题并为 R 中的每个组做练习。
下面是我想要实现的输出。
Group,Date,Month,Sales,lag,lead,Output
Group1,42005,1,2503,0,2,3734
Group1,42036,2,3734,0,2,6631
Group1,42064,3,6631,2,3,4276.5
Group1,42095,4,8606,0,0,8606
Group1,42125,5,1889,0,2,3294
Group1,42156,6,4819,1,2,4056.5
Group1,42186,7,3294,1,0,4056.5
Group1,42217,8,38999,2,0,4819
Group1,42248,9,28372,1,0,33685.5
Group1,42278,10,25396,4,1,23244.5
Group1,42309,11,21093,1,0,23244.5
Group2,42339,1,9263,0,3,7961.5
Group2,42005,2,6660,1,3,9263
Group2,42036,3,28595,2,2,9263
Group2,42064,4,123,2,0,6660
Group2,42095,5,11855,3,3,11855
Group2,42125,6,15845,4,3,13850
Group2,42156,7,32331,2,2,15845
Group2,42186,8,3188,1,1,32331
Group2,42217,9,38161,4,0,15845
任何线索将不胜感激。
我错过了一些东西。请指导我如何解决这个问题。如果我需要使用任何功能,请帮助我。
谢谢,
【问题讨论】: