2

時系列データを扱っていて、apply.weekly(). 特定の日付以降、週が正しく集計されないように見えます。

library(xts)

value <-  c(46.40269, 47.27100 ,47.73311, 46.12858, 44.54989 ,42.79287, 41.70017 ,41.22373, 40.16180, 38.48705 ,37.02111 ,35.95312, 37.47187, 42.59649 ,49.22880, 53.96820, 57.97346, 61.22755,61.79824, 65.05720, 65.30233 ,61.86191,58.03687, 55.17815, 52.88933, 51.47876, 50.31402, 48.91674, 47.47042)
DATE <- as.Date(c("2038-01-03", "2038-01-04", "2038-01-05", "2038-01-06", "2038-01-07" ,"2038-01-08", "2038-01-09", "2038-01-10", "2038-01-11", "2038-01-12", "2038-01-13" ,"2038-01-14", "2038-01-15" ,"2038-01-16" ,"2038-01-17", "2038-01-18", "2038-01-19", "2038-01-20", "2038-01-21", "2038-01-22", "2038-01-23", "2038-01-24" ,"2038-01-25", "2038-01-26", "2038-01-27", "2038-01-28", "2038-01-29", "2038-01-30", "2038-01-31"))

DF <- data.frame(DATE, value)
DF_daily <- xts(DF$value, order.by = DF$DATE) 
DF_weekly <- apply.weekly(DF_daily, FUN=sum)

print(DF_weekly)

これにより、次の出力が生成されます。

                [,1]
2038-01-03  46.40269
2038-01-10 311.39935
2038-01-16 231.69144
2038-01-31 840.70198

最終期間が 15 日間であることに注目してください。ここで、代わりに 2010 年の日付を使用すると、期待どおりの結果が得られます。つまり、

DATE <- as.Date(c("2010-01-03", "2010-01-04", "2010-01-05", "2010-01-06", "2010-01-07" ,"2010-01-08" ,"2010-01-09" ,"2010-01-10", "2010-01-11", "2010-01-12" ,"2010-01-13" ,"2010-01-14" ,"2010-01-15" ,"2010-01-16", "2010-01-17", "2010-01-18", "2010-01-19" ,"2010-01-20" ,"2010-01-21" ,"2010-01-22", "2010-01-23", "2010-01-24", "2010-01-25" ,"2010-01-26","2010-01-27" ,"2010-01-28" ,"2010-01-29" ,"2010-01-30", "2010-01-31"))

上記のコードでは、次の出力が生成されます。

                [,1]
2010-01-03  46.40269
2010-01-10 311.39935
2010-01-17 280.92024
2010-01-24 427.18889
2010-01-31 364.28429

私が知らない2038年について何か奇妙なことがありますか?

このコードを 64 ビット Windows 7 Enterprise で実行sessionInfo()すると、次の出力が返されます。

R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] xts_0.9-7  zoo_1.7-12

loaded via a namespace (and not attached):
[1] tools_3.2.3     grid_3.2.3      lattice_0.20-33
4

1 に答える 1

0

2038 年 1 月 19 日は特別な日付です。午前 3 時 14 分 8 秒に、32 ビット UNIX エポック (1970 年 1 月 1 日の午前 0 時からの秒数をカウント) がオーバーフローします。タイムスタンプの処理にバグがあり、この日付でカウンター ブレークが発生する可能性があります。多くの数値は符号付き 32 ビット整数として格納され、最大値は 2,147,483,647 です。

これは、2000年問題と同様に「2038年問題」と呼ばれています。

ただし、RDateタイプはUnix エポック以降、数ではなく日数です。私には、これはxtsパッケージに問題があることを示唆しています。

この問題を抱えているのはあなただけではありません (メーリング リストでの 2012 年の議論はこちら)。このバグは、システムの日付処理と R の日付処理の間の不適切なハンドオフに起因しているようです。

于 2016-05-09T18:58:45.160 に答える