我正在尝试计算一个折扣累积总和,其中后面的值更有价值。
假设我有以下数据集:
dt <- data.table( "year" = c(79,80,81,82,83), "value" = c(5,2,6,8,9))
> dt
year value
1: 79 5
2: 80 2
3: 81 6
4: 82 8
5: 83 9
Run Code Online (Sandbox Code Playgroud)
我想要以下输出:
> dt2
year value DCS
1: 79 5 5.0000
2: 80 2 6.5000
3: 81 6 11.8500
4: 82 8 18.6650
5: 83 9 25.7985
Run Code Online (Sandbox Code Playgroud)
贴现累积金额 (DCS) 是通过以 10% 的年贴现率贴现之前的值来计算的。因此,对于第一行和第二行,DCS 值由 2 + 5*(0.9)^1 给出。对于第三行,DCS 为 6 + (0.9)^1*2 + (0.9)^2*5,依此类推。
形式上,贴现总和公式由下式给出:
最后,如果可能,最好使用 data.table 解决方案。
我正在寻找一种在大型数据库上实现滚动总和的快速方法。我想要的是一个支持左(和右)对齐和最小观察论证的快速函数。
本质上,即使样本大小小于指定的宽度,我也想计算滚动总和。在下面的示例中,只要有下 5 个值可用,我就想要下 5 个值的总和,并且如果前导值的大小小于 5,则对剩余的所有值求和。
例子:
x <- seq(1:10)
期望的输出:
15 20 25 30 35 40 34 27 19 10
我知道这rollapply(x,5, sum, align = "left", partial=1)会产生所需的输出,但我正在寻找更快的解决方案。
frollsum来自包 data.table 的速度很快,但似乎没有对最小观察的争论。roll_sum从包装卷也很快,并接受最小观察值,但不支持左对齐。
提前致谢。