xtsデータのサブセットをつくるときのメモ

メモ。

time series - subsetting tricks for xts in R - Stack Overflow

xtsのデータを月ごとに分けるときにどうするんだろうと思って調べたら、.indexXXXという関数が用意されてるらしい。

?indexClassするとヘルプが見れる。indexから月とか日とかのデータをもってくるのに使えるのはこのへん。

# time component extraction/conversion

.indexDate(x)

.indexday(x)
.indexmday(x)
.indexwday(x)
.indexweek(x)
.indexmon(x)
.indexyday(x)
.indexyear(x)

.indexhour(x)
.indexmin(x)
.indexsec(x)

でもいろいろ直観に反するところがある。

例。

> library(xts)
> data(sample_matrix)
> (a <- as.xts(sample_matrix)[1])
               Open     High      Low    Close
2007-01-02 50.03978 50.11778 49.95041 50.11778

これの月は1だと思いきや、0(インデックスがゼロから始まる)。

> .indexmon(a)
[1] 0

年は2007だと思いきや、107(1900年が基準?)。

> .indexyear(a)
[1] 107

日は2だと思いきや、13515(1970年が基準)。

> .indexday(a)
[1] 13515
attr(,"tzone")
[1] ""
attr(,"tclass")
[1] "POSIXct" "POSIXt" 

まあ日に関しては、.indexdayではなく.indexmdayを使えば大丈夫。

> .indexmday(a)
[1] 2

ちなみにindexのクラスは変えれるらしいので、↑の挙動は絶対ではないのかも。調べてないけど。

The specified value for indexClass<- must be a character string containing one of the following: Date, POSIXct, chron, yearmon, yearqtr or timeDate.
?indexClassのヘルプより)

うー。奥が深い。