我使用了xts
个对象。对象的索引如下。一年中每小时都有一个。
"2011-01-02 18:59:00 EST"
"2011-01-02 19:58:00 EST"
"2011-01-02 20:59:00 EST"
在列中是与每个索引条目关联的值。我想要做的是计算整个一年中18:59
的所有星期一值的标准差。这一年应该有52个值。
我可以使用weekdays()
功能搜索星期几,但我的问题是搜索时间,例如18:59:00
或任何其他时间。
答案 0 :(得分:1)
您可以使用interaction
从weekdays
和.indexhour
的组合创建一个因子,然后使用split
从xts对象中选择相关的观察结果来执行此操作
set.seed(21)
x <- .xts(rnorm(1e4), seq(1, by=60*60, length.out=1e4))
groups <- interaction(weekdays(index(x)), .indexhour(x))
output <- lapply(split(x, groups), function(x) c(count=length(x), sd=sd(x)))
output <- do.call(rbind, output)
head(output)
# count sd
# Friday.0 60 1.0301030
# Monday.0 59 0.9204670
# Saturday.0 60 0.9842125
# Sunday.0 60 0.9500347
# Thursday.0 60 0.9506620
# Tuesday.0 59 0.8972697
答案 1 :(得分:0)
您可以使用.index*
系列函数(不要忘记'index'前面的'。'):
fxts[.indexmon(fxts)==0] # its zero-based (!) and gives you all the January values
fxts[.indexmday(fxts)==1] # beginning of month
fxts[.indexwday(SPY)==1] # Mondays
require(quantmod)
> fxts
value
2011-01-02 19:58:00 1
2011-01-02 20:59:00 2
2011-01-03 18:59:00 3
2011-01-09 19:58:00 4
2011-01-09 20:59:00 5
2011-01-10 18:59:00 6
2011-01-16 18:59:00 7
2011-01-16 19:58:00 8
2011-01-16 20:59:00 9`
fxts[.indexwday(fxts)==1] #this gives you all the Mondays
用于对您使用的时间进行分组
fxts["T19:30/T20:00"] # this will give you the time period you are looking for
此处您将工作日和时间段结合起来
fxts["T18:30/T20:00"] & fxts[.indexwday(fxts)==1] # to get a logical vector or
fxts["T18:30/T21:00"][.indexwday(fxts["T18:30/T21:00"])==1] # to get the values
> value
2011-01-03 18:58:00 3
2011-01-10 18:59:00 6