【问题标题】:Cumulative Returns with NA's in RR中带有NA的累积回报
【发布时间】:2014-10-23 19:33:43
【问题描述】:

我有以下数据框:

df <- data.frame(Return1=c(NA, NA, .03, .04, .05),
             Return2=c(.25, .33, NA, .045, .90),
             Return3=c(.04, .073, .08, .04, .01))


  Return1 Return2 Return3
1      NA   0.250   0.040
2      NA   0.330   0.073
3    0.03      NA   0.080
4    0.04   0.045   0.040
5    0.05   0.900   0.010

我想计算累积回报,但数据框中缺少值。我用过:

cumprod(df+1)-1

得到结果

  Return1 Return2   Return3
1      NA  0.2500 0.0400000
2      NA  0.6625 0.1159200
3      NA      NA 0.2051936
4      NA      NA 0.2534013
5      NA      NA 0.2659354

这里的问题是,如果有 NA,那么后面的行将作为 Result NA。有没有办法在不影响下面其余行的情况下计算累积收益?

我想得到一个结果:

  Return1 Return2   Return3
1      NA  0.2500 0.0400000
2      NA  0.6625 0.1159200
3    0.03     NA  0.2051936
4 0.07120  0.7373 0.2534013
5 0.12476  2.3008 0.2659354

我知道PerformanceAnalytics包中有一个函数叫做Return.cumulative,但这只会获取整个列的累积返回。

有什么想法吗?

【问题讨论】:

    标签: r na performanceanalytics


    【解决方案1】:
    cumpfun <- function(x){
      x[!is.na(x)] <- cumprod(x[!is.na(x)]+1)-1
      x
    }
    sapply(df,cumpfun)
    
    #      Return1   Return2   Return3
    # [1,]      NA 0.2500000 0.0400000
    # [2,]      NA 0.6625000 0.1159200
    # [3,] 0.03000        NA 0.2051936
    # [4,] 0.07120 0.7373125 0.2534013
    # [5,] 0.12476 2.3008937 0.2659354
    

    请注意,sapply 返回一个矩阵。如果需要数据框,可以使用 as.data.frame(lapply(df, cumpfun))

    【讨论】:

    • 我尝试使用na.omit 方法,但是这个非常好。 (+1)
    • 如何将其移植到 C 代码中? xts source code for runSum handling leading NAs中的一些基础。有兴趣用 C 编写 runProd。@JoshuaUlrich 有什么指导吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多