我正在尝试做一些我认为在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)
最好不要循环
答案 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