長い道のりを遡るオブジェクトを分割しようとすると、奇妙なxtsの動作に気づきました。分割の動作は、エポックで変更されます。
#Create some data
dates <- seq(as.Date("1960-01-01"),as.Date("1980-01-01"),"days")
x <- rnorm(length(dates))
data <- xts(x, order.by=dates)
xtsオブジェクトを週ごとに分割すると、週の最後の日は1970年より前の月曜日として定義されます。1970年以降は、日曜日(予想される動作)として定義されます。
#Split the data, keep the last day of the week
lastdayofweek <- do.call(rbind, lapply(split(data, "weeks"), last))
head(lastdayofweek)
tail(lastdayofweek)
これは、数か月または数年ではなく、数週間だけ問題になるようです。
#Split the data, keep the last day of the month
lastdayofmonth <- do.call(rbind, lapply(split(data, "months"), last))
head(lastdayofmonth)
tail(lastdayofmonth)
なぜそれが数週間だけに適用されるのかはわかりませんが、この動作は次のように関係しているようです。xtsクランから。
エポック(1970-01-01)より前の日付の場合、終了時刻は59.0000秒に調整されます。これは、CソースレベルでのasPOSIXctおよびmktime0のR実装のバグ/機能が原因です。これにより、現在のxtsの回避策では、1970年より前の範囲の精度が1分の粒度に制限されます。
私の回避策は、週単位で分割する場合、1970年より前のデータのオブジェクトを分割する前に日付をシフトすることでした。私は他の誰かがより洗練された解決策(またはエラーを回避する方法)を持っていることを期待しています。
編集:質問が何であるかを明確にするために、私はa)これが発生する理由を指定する(エラーの性質をよりよく理解できるため、それを回避できる)および/またはb)最善の回避策を探していますそれに対処する。