48

xts对对象进行子集化的方法非常好。例如,可以通过执行以下操作获取所有年、月、日但严格在上午 9:30 到下午 4 点之间的所有数据:

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

或者,您可以通过以下方式获得两个日期之间的所有观察结果:

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

或通过执行以下操作在某个日期之前/之后的所有日期:

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

我如何才能获得所有年份仅特定月份的所有数据,或所有月份和年份仅特定日期的所有数据?是否存在任何其他子集化技巧?

4

3 回答 3

40

您可以使用.index*函数系列来获取特定月份或月份中的特定日期。查看?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
于 2012-08-08T19:25:58.933 回答
15

时间子集有点隐藏,所以我理解它为什么会引发这样的问题。我知道的唯一其他“技巧”是lastandfirst函数,如果需要,您可以嵌套它们。例如,这将获得前 3 周的最后 2 天。

last(first(my_xts, "3 weeks"), "2 days")
于 2012-08-08T19:22:23.223 回答
3

xts请注意, windows 和 ubuntu 的 yearmon 日期格式的子集似乎有不同的行为。

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']

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

于 2016-04-15T16:45:44.823 回答