2014-05-13 5 views
0

J'ai rencontré des problèmes avec les zones & séries temporelles dans R, et je n'arrive pas à comprendre comment procéder.Changement de fuseau horaire avec les séries temporelles POSIXct, R

J'ai des données de séries chronologiques comme celui-ci:

df <- data.frame( 
    Date  = seq(as.POSIXct("2014-01-01 00:00:00"), length.out = 1000, by = "hours"), 
    price = runif(1000, min = -10, max = 125), 
    wind  = runif(1000, min = 0, max = 2500), 
    temp  = runif(1000, min = - 10, max = 25) 
) 

Maintenant, la date est en UTC-temps. Je voudrais sous-ensemble/filtrer les données, ainsi, par exemple, je reçois les valeurs d'aujourd'hui (Aujourd'hui 13/05/2014):

df[ as.Date(df$Date) == Sys.Date(), ] 

Cependant, quand je fais cela, je reçois des données qui commence par:

2014-05-13 02:00:00 

Et pas:

2014-05-13 00:00:00 

Parce im actuellement CEST-temps, ce qui est deux heures après UTC-temps. Donc, j'essaie de changer les données:

df$Date <- as.POSIXct(df$Date, format = "%Y-%m-%d %H", tz = "Europe/Berlin") 

Cependant, cela ne fonctionne pas. J'ai essayé diverses variations, comme le dépouiller pour le caractère, puis la conversion et ainsi de suite, mais j'ai couru ma tête contre un mur, et Im devinant qu'il y a quelque chose de simple im manquant.

+0

Vérifiez ce fil: https://stat.ethz.ch/pipermail/r-help /2006-March/101179.html –

+0

J'ai essayé de lire ce lien et le matériel à propos de TZ, mais je n'arrive toujours pas à trouver exactement comment convertir la série. Tout ce que je peux voir, c'est que cela dépend du système sur ce qui fonctionne? Je l'ai résolu jusqu'à présent en utilisant: 'Sys.setenv (TZ = 'GMT')' de [Cette réponse SO] (http://stackoverflow.com/questions/6374874/how-to-change-the- default-timezone-in-r) – NoThanks

+1

Comment utiliser 'df [format (df $ Date,"% Y-% m-% d ") == Sys.Date(),]' – James

Répondre

1

Pour éviter d'utiliser des problèmes avec les fuseaux horaires comme celui-ci, utilisez format pour obtenir la représentation de caractère de la date:

df[format(df$Date,"%Y-%m-%d") == Sys.Date(), ] 
Questions connexes