如何在R中计算以100为基值的月度复利收益指数列
解决方案
实现代码(tidyverse风格)
依赖tidyverse和lubridate两个常用包,代码如下:
library(tidyverse) library(lubridate) # 原始数据 dat <- tibble::tribble( ~date , ~pct_monthly_return, 2021-01-31, 0.0023, 2021-02-28, 0.01, 2021-03-31, 0.035) # 生成目标数据框 result <- dat %>% # 插入基期行:在数据集最前面添加基准时间行 add_row( date = min(.$date) %m-% months(1), pct_monthly_return = 0, .before = 1 ) %>% # 复利计算指数值,需要保留几位小数可自行加round()调整 mutate( index = 100 * cumprod(1 + pct_monthly_return) )
逻辑说明
%m-%是lubridate提供的安全月份减法,可避免月底日期跨月计算出现无效日期的问题- 插入基期行后用
cumprod计算累计乘积,刚好匹配复利计息规则:每一期指数=上期指数*(1+当期收益率),基期收益率为0刚好对应初始值100
内容的提问来源于stack exchange,提问作者Bandit King
相关产品推荐
相关产品推荐

