gpt4 book ai didi

r - R 中 NA 的累积返回

转载 作者:行者123 更新时间:2023-12-05 01:02:53 24 4
gpt4 key购买 nike

我有以下数据框:

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,则后续行将作为结果 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 的函数,但这只会获得整个列的累积返回。

有任何想法吗?

最佳答案

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)) 之类的东西。

关于r - R 中 NA 的累积返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25574199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com