2013-05-29 46 views
2
搜索特定時間

我使用xts對象。對象的索引如下。一年中的每一小時都有一個。R從索引

"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

你可以(在 '索引' 前不要忘了 ''!)使用.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 
+0

謝謝,就是這麼做的。 – user1223862

1

您可以使用interactionweekdays.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