4

xts パッケージの timeBasedSeq 関数を使用して、時系列/動物園オブジェクトのインデックスとして使用していますが、作成した日の一部を繰り返します! 「「order.by」のインデックスエントリは一意ではないため、動物園で問題が発生します。

例えば:

timeBasedSeq("19860601/19861231")

作成します

..."1986-10-23" "1986-10-24" "1986-10-25" "1986-10-26" "1986-10-26" "1986-10-27" "1986-10- 28" "1986-10-29""...

なんらかの理由で 26 日を繰り返すのですが、どうすればそれを回避できますか?

4

2 に答える 2

4

バグは xts にあります。その関数は を使用seq.POSIXctし、同じ動作は次の方法で生成できます。

seq(as.POSIXct("1986-10-01"), as.POSIXct("1986-11-01"), by="day")

そして、私にとってさらに驚くべきことは、seq.POSIXlt

seq(as.POSIXlt("1986-10-01"), as.POSIXlt("1986-11-01"), by="day")

しかし、その動作は seq.POSIXt で十分に文書化されてby="DSTday"おり、日が暗黙の間隔である場合に xts の作成者がおそらく使用する必要のある使用に関する規定があります。一時的な回避策は次のとおりです。

timeBasedSeq("19860601/19861231")[ !duplicated(timeBasedSeq("19860601/19861231") ]

またはよりコンパクトに:

unique(timeBasedSeq("19860601/19861231"))
于 2011-05-20T16:13:18.860 に答える
1

私のコメントを拡張するには:バグは夏時間からの変更によって説明されます。この時点で24時間を追加しても、1時間は離陸するため、翌日に移動することはありません。

> as.POSIXct("1986-10-26")
[1] "1986-10-26 BST"
> as.POSIXct("1986-10-26")+24*60*60
[1] "1986-10-26 23:00:00 GMT"

1つの解決策は、日付を真夜中ではなく正午にstrftime基づいて、無関係な情報を取り除きas.POSIXlt、タイムクラスに戻すために使用することです。

as.POSIXlt(strftime(timeBasedSeq("19860601 1200/19861231/d"),"%Y-%m-%d"))

...
[146] "1986-10-24" "1986-10-25" "1986-10-26" "1986-10-27" "1986-10-28"
...
于 2011-05-20T15:53:38.703 に答える