在另一个时间范围内返回数据子集的时间范围?

有非常漂亮的方法来xts对象的子集。 例如,可以通过以下方式获取所有年份,月份,date的所有数据,但严格地在上午9点30分到下午4点之间:

 my_xts["T09:30/T16:00"] 

或者你可以通过做两个date之间的所有观察:

 my_xts["2012-01-01/2012-03-31"] 

或者在某个date之前/之后的所有date:

 my_xts["/2011"] # from start of data until end of 2011 my_xts["2011/"] # from 2011 until the end of the data 

我怎样才能得到所有年份的所有数据只有特定的几个月,或者只有特定的几个月的数据? 还有其他的子集技巧吗?

您可以使用.index*函数系列来获取特定的月份或当月的特定date。 请参阅?index以获取完整的函数列表。 例如:

 library(quantmod) getSymbols("SPY") SPY[.indexmon(SPY)==0] # January for all years (note zero-based indexing!) SPY[.indexmday(SPY)==1] # The first of every month SPY[.indexwday(SPY)==1] # All Mondays 

时间的子集有点隐藏,所以我明白为什么会引发这样的问题。 我知道的唯一的另一个“技巧”是lastfirstfunction,如果需要的话可以嵌套。 例如,这将获得前3周的最后2天。

 last(first(my_xts, "3 weeks"), "2 days") 

请注意,对于windows和ubuntu,yearmondate格式的xts子集似乎有不同的行为。

 library(quantmod) library(xts) getSymbols("SPY", src="google", from = "2004-01-01") x1 <- SPY['2006-01/2007-12'] x2 <- apply.monthly(x1,mean) x2['2006-01/2007-12'] x3 <- as.xts(coredata(x2),order.by = as.yearmon(index(x2))) x3['2006-01/2007-12'] 

由于格式是完整的date,因此x2的结果在windows和ubuntu之间是一致的。 但是,在将date转换为yearmon之后, x3会为windows和ubuntu产生不同的结果。