首页 > 解决方案 > 如何在数据中使用 NA 计算年化回报?

问题描述

我需要从季度回报数据系列中计算年化回报。示例数据创建如下

df <- data.frame(v1 = c(0.01, 0.03, 0.02,0.05, 0.06,0.03,0.01, NA), V2 = c(NA, 0.1, 0.02,NA,0.03,0.05,0.11, 0.2))

我的代码是这样的:

df_annual <- rollapply(df, width = 4, Return.annualized, scale =4, align = "right", fill = NA)

我得到的结果是

v1        V2

NA         NA
NA         NA
NA         NA
0.114161    0.258884
0.169318    0.212756
0.169318    0.139818
0.157854    0.275849
0.139251    0.440558

我希望得到以下结果:

V1         V2

NA          NA
NA          NA
NA          NA
0.114161    NA
0.169318    NA
0.169318    NA
0.157854    NA
NA          0.440558

换句话说,我只希望 R 计算至少有四个连续数字的年化回报。我也想知道我是如何得到第一个结果的。谢谢!

标签: r

解决方案


1) Return.annualized忽略 NA 值,然后计算剩余部分的年化回报。如果您希望在任何输入为 NA 时输出 NA ,则在输入中检查 NA ,如果遇到则输出 NA ;否则,运行Return.annualized.

library(PerformanceAnalytics)
library(zoo)

Return.annualizedNA <- function(x, ...) if (anyNA(x)) NA else Return.annualized(x, ...)
rollapplyr(df, width = 4, Return.annualizedNA, scale = 4, fill = NA)

2)另一种可能性是直接使用prod

library(zoo)

rollapplyr(df + 1, 4, prod, fill = NA) - 1

推荐阅读