您可以合并它们,使用with向后填充,然后正常子集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