r - 如何在数据中使用 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 计算至少有四个连续数字的年化回报。我也想知道我是如何得到第一个结果的。谢谢!
解决方案
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
推荐阅读
- php - 在 Vue 中使用 PHP Api 响应
- reactjs - Expo React 警告:无法对未安装的组件执行 React 状态更新。这是一个无操作,但它表明您的应用程序中存在内存泄漏
- powerapps - 我正在尝试将查找功能结果转换为 powerapps 中的文本
- swift - 带有firestore数组的tableview swift uikit
- python - 将水加到一堆玻璃杯中
- python - 使用 StringGrouper 将分组数据解析为 json
- javascript - Ag Grid Cell Render 属性不存在
- ios - 推送通知单击时xamarin推送通知ios页面导航不起作用
- git - 独立特性的git分支策略
- mysql - 从 MySQL 5.6.35 迁移到 MariaDB 10.6.3 - 查询不起作用