r 的累积百分比回报

run*_*rds 0 finance r

我有一个数据框,其中包含一段时间内的各种股票收益。回报以收益或损失百分比表示(0.02 表示 2% 回报或前期值的 102%)。

我正在寻找一个函数或方法来累积显示每个时期的回报(以百分比表示)。例如,这将显示前 3 个周期的 stock1 的累积/复合收益为 0.02、0.0404、0.09242.... (1.02*1.02*1.05)。

   mydf = data.frame(period = c('a','b','c','d','e','f'), stock1=c(.02, .02, .05,-.05,-.05,0), stock2=c(0, .01,0,.03,.05,.01))
   mydf
   #help mydf$stk1_percentgain =
Run Code Online (Sandbox Code Playgroud)

eip*_*i10 5

这将为您提供按期间的累积回报:

sapply(mydf[,-1], function(x) cumprod(1 + x) - 1)

          stock1    stock2
[1,]  0.02000000 0.0000000
[2,]  0.04040000 0.0100000
[3,]  0.09242000 0.0100000
[4,]  0.03779900 0.0403000
[5,] -0.01409095 0.0923150
[6,] -0.01409095 0.1032382
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要更易于阅读的内容:

sapply(mydf[,-1], function(x) paste0(sprintf("%0.2f", (cumprod(1 + x) - 1)*100, 2),"%"))

     stock1   stock2  
[1,] "2.00%"  "0.00%" 
[2,] "4.04%"  "1.00%" 
[3,] "9.24%"  "1.00%" 
[4,] "3.78%"  "4.03%" 
[5,] "-1.41%" "9.23%" 
[6,] "-1.41%" "10.32%"
Run Code Online (Sandbox Code Playgroud)