我正在努力寻找标准普尔500指数中收益率超过x%的月份。下面的代码可以找到这样的实例:
getSymbols('^GSPC', from='2010-01-01')
G <- monthlyReturn(Cl(GSPC))
names(G) <- 'RET.M'
G[G$RET.M>.05]现在,我想了解一下,这些实例每年的回报是多少?我知道我可以这样计算每年的回报:
G$RET.Y <- yearlyReturn(Cl(GSPC))但现在,我想查询G$RET.Y,以获得收益率为5%或更高的月份的年回报率。
有什么建议吗?
发布于 2013-02-11 01:07:52
您可以合并它们,使用带有fromLast=TRUE的na.locf向后填充,然后按正常方式子集
G$RET.Y <- yearlyReturn(Cl(GSPC))
G$RET.Y <- na.locf(G$RET.Y, fromLast=TRUE)
G$RET.Y[G$RET.M > 0.05]
# RET.Y
#2010-03-31 0.1100186233
#2010-07-30 0.1100186233
#2010-09-30 0.1100186233
#2010-12-31 0.1100186233
#2011-10-31 -0.0000318056
#2013-01-31 0.0643252302或者,您可以将索引格式化为年份的字符表示形式-- format(index(G[G$RET.M > 0.05]), "%Y") --然后用它来设置年度数据的子集
do.call(rbind, lapply(format(index(G[G$RET.M > 0.05]), "%Y"), function(x) {
yearlyReturn(Cl(GSPC))[x]
}))
# yearly.returns
#2010-12-31 0.1100186233
#2010-12-31 0.1100186233
#2010-12-31 0.1100186233
#2010-12-31 0.1100186233
#2011-12-30 -0.0000318056
#2013-02-08 0.0643252302https://stackoverflow.com/questions/14800046
复制相似问题