在另一个时间范围内返回数据子集的时间范围?
有非常漂亮的方法来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
时间的子集有点隐藏,所以我明白为什么会引发这样的问题。 我知道的唯一的另一个“技巧”是last
和first
function,如果需要的话可以嵌套。 例如,这将获得前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产生不同的结果。