如何在R中检索向量的键?

时间:2013-02-10 16:47:50

标签: r quantmod

我试图在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%或更多的月份的年度回报。

有什么建议吗?

1 个答案:

答案 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