【问题标题】:cumulative percentage return in rr中的累积百分比回报
【发布时间】:2015-03-27 01:26:28
【问题描述】:

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

我正在寻找一个函数或方法来累积显示每个时期的回报(以百分比为单位)。例如,这将显示 stock1 前 3 个周期的累积/复合收益为 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 =

【问题讨论】:

    标签: r finance


    【解决方案1】:

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

    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
    

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

    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%"
    

    【讨论】:

    • 我更喜欢:sapply(mydf[,-1] + 1, cumprod) - 1。因为...代码高尔夫。
    【解决方案2】:

    你可以使用dplyr:

    mydf %>% 
      mutate_each(funs(
        paste0(formatC(100 * (cumprod(1 + .) - 1), format = "f", 2), "%")), -period)
    

    这给出了:

    #  period stock1 stock2
    #1      a  2.00%  0.00%
    #2      b  4.04%  1.00%
    #3      c  9.24%  1.00%
    #4      d  3.78%  4.03%
    #5      e -1.41%  9.23%
    #6      f -1.41% 10.32%
    

    【讨论】:

      猜你喜欢
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2017-03-03
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      相关资源
      最近更新 更多