2

endpointsたとえば、毎年取得しようとすると、次のようになります。

xts.data <- xts(1:10000, order.by=seq(from=as.Date("1970-01-01"), by=1, len=10000))
z <- endpoints(xts.data, on="months", k=12)

これの戻り値は次のとおりです。

> z
[1]     0 10000

12より大きい数値でも同じです。なぜxts、最初から毎年または13か月目のインデックスを返さないのでしょうか。1年の期間数によって制限されますか?それは私がした場合です:

 z <- endpoints(xts.data, on="weeks", k=54)

これはうまくいくようです。

4

2 に答える 2

2

これはバグであるか、少なくとも文書化する必要のある制限であることに同意します。k「月」の場合は、k = 1、2、3、4、および6でのみ機能します。

回避策を見つけて、私の最初のアイデアは次のとおりでした。

 library(xts)
 x <- xts(1:10000, order.by=seq(from=as.Date("1970-01-01"), by=1, len=10000))
 index(x)[endpoints(x, on="months", k=6)[c(T,F)]]

与える:

 "1970-12-31" "1971-12-31" "1972-12-31"... "1995-12-31" "1996-12-31"

しかし、別のデータセットを使用すると壊れます。

x <- xts(1:10000, order.by=seq(from=as.Date("1970-07-01"), by=1, len=10000))

これは次のようになります。

"1971-06-30" "1972-06-30" "1973-06-30" ...

安定した答えは次のとおりです。

dates <- index(x)[endpoints(x, on="months", k=6)]
dates[ as.POSIXlt(dates)$mon==11 ]

(英語:各半年の最終日を取得し、12月のもののみを保持します。

別の方法は、を使用してendpoints(x, on="years")、気に入らない場合は最後の日付を削除することです。

今年の「最終取引日」または「最終サンプル日」が必要だと思いますので、実際には毎年12月31日になることはありません。ただし、毎年特定の日付が必要な場合は、次のようにします。

index(x)[.indexmon(x)==11 & .indexmday(x)==31]
于 2012-11-11T02:26:47.430 に答える
1

はい。これは、実装の落とし穴のように見えます。作業中のバージョンをより完全にテストできるようになったら、R-forgeに修正を追加します。

2回更新

これについては、R-forgeのrev742にパッチがあります。最終的なものではないかもしれませんが、理想的にはこれが方向性です。

> head(xts.data[z])
       [,1]
1970-12-31  365
1971-12-31  730
1972-12-31 1096
1973-12-31 1461
1974-12-31 1826
1975-12-31 2191

> head(xts.data[endpoints(xts.data, on="months", k=1)])
           [,1]
1970-01-31   31
1970-02-28   59
1970-03-31   90
1970-04-30  120
1970-05-31  151
1970-06-30  181
> head(xts.data[endpoints(xts.data, on="months", k=2)])
           [,1]
1970-02-28   59
1970-04-30  120
1970-06-30  181
1970-08-31  243
1970-10-31  304
1970-12-31  365
> head(xts.data[endpoints(xts.data, on="months", k=3)])
           [,1]
1970-03-31   90
1970-06-30  181
1970-09-30  273
1970-12-31  365
1971-03-31  455
1971-06-30  546
> head(xts.data[endpoints(xts.data, on="months", k=4)])
           [,1]
1970-04-30  120
1970-08-31  243
1970-12-31  365
1971-04-30  485
1971-08-31  608
1971-12-31  730
> head(xts.data[endpoints(xts.data, on="months", k=6)])
           [,1]
1970-06-30  181
1970-12-31  365
1971-06-30  546
1971-12-31  730
1972-06-30  912
1972-12-31 1096
> head(xts.data[endpoints(xts.data, on="months", k=7)])
           [,1]
1970-07-31  212
1971-02-28  424
1971-09-30  638
1972-04-30  851
1972-11-30 1065
1973-06-30 1277
于 2012-11-11T04:34:02.980 に答える