小编lov*_*low的帖子

R 中的折扣累积和

我正在尝试计算一个折扣累积总和,其中后面的值更有价值。

假设我有以下数据集:

 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 解决方案。

r cumulative-sum data.table

16
推荐指数
2
解决办法
318
查看次数

r中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从包装卷也很快,并接受最小观察值,但不支持左对齐。

提前致谢。

r data.table rolling-computation

4
推荐指数
1
解决办法
345
查看次数