计算年化收益率时结果表格起始行错误的技术咨询
解决滚动年度收益率计算的起始行错误问题
我来帮你搞定这个问题!你遇到的起始行结果异常,核心原因是rollapply函数默认的对齐方式不符合你的预期。
问题根源
rollapply默认使用align = "center"的对齐规则,当窗口宽度为12时,它会在窗口覆盖足够数据时(而非等完整的12期数据到齐)就输出计算结果。这就导致你看到第7行就出现了非NA值,但实际上这个结果对应的并不是前12期(1-12)的年化收益率,而是一个居中对齐的窗口数据,不符合你想要的"每一行对应截至当前的过去12个月年化"的需求。
解决方案
你只需要在rollapply中添加align = "right"参数,强制让每个滚动窗口的结果对应窗口的最后一个位置——也就是只有当有完整的12期数据时,才会在第12行输出第一个年化收益率,后续每行对应过去12个月的滚动计算。
同时,注意你原始数据里有NA值,默认情况下prod遇到NA会返回NA,如果这些NA代表的是无收益(收益率为0),可以先填充缺失值:
修正后的完整代码
# 先处理NA值(根据实际业务逻辑,这里假设NA代表收益率为0) df2$Return[is.na(df2$Return)] <- 0 # 计算滚动12期年化收益率,设置right对齐 df2$AnnualReturn <- rollapply(df2$Return + 1, width = 12, FUN = prod, fill = NA, align = "right") - 1
预期结果
修正后,你的结果表格会变成:
- 第1到11行:全部为
NA(因为没有足够的12期数据) - 第12行:对应第1-12期的年化收益率
- 第13行:对应第2-13期的年化收益率
- 以此类推,完全符合滚动年度收益率的计算逻辑
内容的提问来源于stack exchange,提问作者Roger
相关产品推荐
相关产品推荐

