2

我试图在标准普尔 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% 或更多的月份的年回报率。

有什么建议么?

4

1 回答 1

2

您可以合并它们,使用with向后填充,然后正常子集na.locffromLast=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
于 2013-02-10T17:07:51.703 回答