我正在寻找计算时间序列内特定类型的“递减”总和或衰减值。
例如,假设我有一些简单的数据:
thedata <- data.frame(magicseeds = c(30,20,10,40,20)
,week = seq(from = 1, to = 5, by = 1))
我想计算“魔法种子”的价值,使其影响随着时间的推移而递减。例如,假设每个值占下周值的 20%,因此 magicseeds 列 (30) 中的第一个值将是 30*0.2+6*0.2,依此类推,直到时间序列结束 (=7.488)。最后一个值 (20) 的计算结果将为 0,因为它是时间序列中的最后一个值。
过滤函数很接近,但它是考虑总时间序列的累积和,例如。
thedata$filtervalues <- with(thedata, as.numeric(stats::filter(magicseeds, filter=0.2, method="recursive")))
我也一直在测试 rollapply 功能,但运气不佳。
最终输出将是这样的:
magicseeds week filtervalues calculation
1 30 1 7.488 sum(30*.20^1, 30*.20^2, 30*.20^3, 30*.20^4)
2 20 2 4.96 sum(20*.20^1, 20*.20^2, 20*.20^3)
3 10 3 2.4 sum(10*.20^1, 10*.20^2)
4 40 4 8.000 sum(40*.20^1)
5 20 5 0.000
UPDATE:这个问题或多或少已经在这里得到了回答:通过改变行位置跨行迭代并求和计算 https://stackoverflow.com/questions/45406009/iterate-and-sum-a-calculation-across-rows-by-varying-row-position