如何使用xts对象的索引来对另一个xts对象进行子集化?

时间:2013-03-24 18:16:29

标签: r xts

require(quantmod)
require(TTR)
require(PerformanceAnalytics)

tckr<-"^GSPC"

start<-"1986-12-31"
end<- format(Sys.Date(),"%Y-%m-%d") # yyyy-mm-dd

getSymbols(tckr, from=start, to=end)
US10yRate<-getSymbols("DGS10",src="FRED",auto.assign=FALSE,from=start, to=end)

US10yRate<-to.daily(US10yRate)[,1]

#running 25 day correlation 
correlationSPand10y<-runCor(US10yRate[,1],GSPC[1:12789,2],n=25)

此代码来自TimelyPortfolio博客。它给出了runCor最后一行的错误。原因是US10yRate的观测数量与GSPC的观测数量不同。 US10yRate具有非连续日期(1990-01-02,1990-01-05-05等)。我想根据US10yRate日期对GSPC进行子集化,以便它们可以相互匹配。此操作与SQL中的合并完全相同。我怎样才能用R?

中的xts对象处理这个问题

谢谢!

2 个答案:

答案 0 :(得分:1)

查看GSPC,特别是它的行数。

> dim(GSPC)
[1] 6612    6

> GSPC[1:12789,2]
Error in `[.xts`(GSPC, 1:12789, 2) : subscript out of bounds

 U <- US10yRate[index(US10yRate) %in% index(GSPC),1]
 G <- GSPC[index(GSPC) %in% index(US10yRate), 2]
 dim(U)
 #  [1] 6552    1
 dim(G)
 #  [1] 6552    1

答案 1 :(得分:1)

您可以先合并它们,以确保它们的行数相同。

dat <- merge(US10yRate[, 1], GSPC[, 2], all=FALSE)
# or,
# dat <- na.locf(merge(US10yRate[, 1], GSPC[, 2]))

correlationSPand10y <- runCor(dat[, 1], dat[, 2], n=25)