【发布时间】:2014-08-08 17:48:06
【问题描述】:
这可能是一个基本的 rollapply 或循环问题,但是我找不到指示 rollapply 函数或为循环计算创建表达式的方法
我有一个初始值为 100 的增长率向量。我想计算增长序列每个点的值并获得该值的向量。鉴于实际的增长序列比下面的例子长得多,下面的例子是不可能的。
x<-c(0.02,0.01,0.4,0.09,-0.3,0.1)
100*(1+x[1])*(1+x[2])*(1+x[3])*(1+x[4])*(1+x[5])*(1+x[6])#End Value
a1<-100*(1+x[1])#1st value
a2<-a1*(1+x[2])#2nd value
a3<-a2*(1+x[3])#3rd value
a4<-a3*(1+x[4])#4th value
a5<-a4*(1+x[5])#5th value
a6<-a5*(1+x[6])#6th value
s<-c(a1,a,2,a,3,a4,a,5,a6) #vector of values
我相信 rollapply 可以在这里使用,但是我不能编写函数来获取先前值和下一个顺序来创建函数,而且我不确定是否以及如何将 100 的初始值合并到函数或在 x 的开头添加它。此外,也许这可以作为一个循环来完成。 (在伪代码中查找函数)
x<-c(0.02,0.01,0.4,0.09,-0.3,0.1)
require(zoo);
fn<- function(y) {(1+prior x)*(1+next x)}
rollapply(x, 1, fun= fn, fill=NA, align='right')
欢迎任何帮助
【问题讨论】:
-
exp(cumsum(log(1+x))) -
谢谢你,我相信我把事情复杂化了。不知道 cumsum 函数,我猜你 log as 添加然后 exp 使值恢复到算术增长。
-
或者更简单:
cumprod(1+x)
标签: r