我试图在S& P 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%或更多的月份的年度回报。
有什么建议吗?
答案 0 :(得分:2)
您可以合并它们,使用na.locf
fromLast=TRUE
向后填充,然后将子集正常
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.0643252302