2016-05-09 2 views
2

Je travaille avec des données chronologiques et rencontre un problème avec apply.weekly(). Il semblerait qu'après une certaine date, les semaines ne se cumulent pas correctement.R apply.weekly() renvoie une période incorrecte lors de la conversion de la série journalière en série hebdomadaire

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) 

Cela génère la sortie suivante:

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

Remarquez que la dernière période est de 15 jours de long. Maintenant, si j'utilise plutôt des dates de 2010, j'obtiens exactement ce que vous attendez. Autrement dit, en utilisant dans le code ci-dessus

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")) 

génère la sortie:

   [,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 

Y at-il quelque chose de bizarre au sujet de l'année 2038, je ne sais pas?

Je courais ce code sur 64 bits de Windows 7 Enterprise, sessionInfo() retourne la sortie suivante

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 
+1

https://xkcd.com/607/ –

+0

Il existe une variante un peu plus obscure des problèmes de l'an 2000, appelée [Problème Année 2038] (https://en.wikipedia.org/wiki/Year_2038_problem), où l'Epoque Unix débordera un nombre de 32 bits le 19 janvier 2038. –

+0

convertit-il les dates en horodatages POSIXlt encore le problème? –

Répondre

0

19 Janvier, 2038 une date spéciale: A 03:14:08, 32 bits l'époque unix (en comptant le nombre de secondes écoulées depuis minuit, le 1er janvier 1970) débordera. Il est possible qu'il y ait un bug dans la gestion des horodatages qui provoque un saut de compteur à cette date. De nombreux nombres sont stockés sous la forme d'entiers 32 bits signés, dont la valeur maximale est de 2 147 483 647.

Ceci est appelé "Year 2038 Problem", similaire au problème Y2K.

Cependant, le R Date type is in the number of days, instead of the number of seconds, depuis l'époque Unix. Pour moi, cela suggère qu'il y a un problème avec le paquet xts.

Vous n'êtes pas seul dans ce problème (here is a 2012 discussion on a mailing list), et il semble que le bogue provient d'un mauvais transfert entre la gestion des dates système et la gestion des dates R.

+1

xts * always * stocke l'index sous la forme d'un double contenant le nombre de secondes écoulées depuis l'époque. Il est donc peu probable que vous pensiez qu'il s'agit d'un problème avec xts. –