使用R中的先前值应用可变的变化率

时间:2018-11-16 15:34:09

标签: r

我正在尝试做一些我认为在Excel中很容易实现的事情,但在R中却很简单。这个概念大致是复利,可变利率可以增加或减少,并使用去年的价值。我希望x的值由x的先前值与x的先前值相乘,再乘以另一个向量中的比率来确定。这应该在向量中递归发生。

数学为:x [i + 1] = x [i] + x [i] * rate [i]

我尝试使用stats::filter并在lag中使用dplyr进行探索,但是它们要么无法处理可变速率,要么输出矢量似乎与该值略有偏离它应该是。

以下是一些模拟数据:

set.seed(2)
x <- 100 ## initial data
rate <- rnorm(5,1)/100 ## generate random rate of change

所以比率是:

rate = c(0.001030855, 0.011848492, 0.025878453, -0.001303757, 0.009197482)

我想要的输出是:

x.with.rate <- c(100.1031, 101.2892, 103.9104, 103.7749, 104.7294)

最好不要循环

2 个答案:

答案 0 :(得分:2)

您的逻辑可以简化为(X_0)*((1+R_0)*(1+R_1)...(1+R_n))

set.seed(2)
x <- 100 ## initial data
rate <- rnorm(5,1)/100 ## generate random rate of change
(x)*cumprod((1+rate))

[1] 100.1031 101.2892 103.9104 103.7749 104.7294

答案 1 :(得分:0)

使用Reduce

Reduce(function(x, r) x * (1 + r), init = 100, rate, acc = TRUE)[-1]
## [1] 100.1031 101.2892 103.9104 103.7749 104.7294