2017-12-19 5 views
1

Ich habe vielleicht eine neugierige Lücke im Laufe der Zeit in den frühen Stunden des 2017-10-01 entdeckt. Ich habe einen abgenutzten Code, den ich oft verwende, um 30-minütige Intervalle zum Zusammenfassen und Plotten von Zählwertbeobachtungen zu erstellen. Die Intervalle beginnen bei Sonnenuntergang und enden um die Morgendämmerung - so ändert sich das Datum um Mitternacht. Für fast jedes Datenpaar ("Nacht") möchte ich etwas eingeben, mein Code funktioniert einwandfrei. Aber für die Nacht von 2017-09-30 überspringt es zwei Intervalle 02:00 und 02:30. Code unten.Odd Zeitlücken mit POSIXct

missing.times <- data.frame(isotime2=seq(as.POSIXct("2017-09-30 17:30:00", format="%Y-%m-%d %H:%M:%S"), as.POSIXct("2017-10-01 06:30:00", format="%Y-%m-%d %H:%M:%S"), by="30 min")); missing.times #missing 0200 and 0230 

all.okay <- data.frame(isotime2=seq(as.POSIXct("2017-10-01 17:30:00", format="%Y-%m-%d %H:%M:%S"), as.POSIXct("2017-10-02 06:30:00", format="%Y-%m-%d %H:%M:%S"), by="30 min")); all.okay 

Ich versuchte einen hinterhältigen Workaround, aber ich produziere immer noch eine Lücke.

#create intervals for the next date from midnight to 06:30 
workaround <- data.frame(isotime2=seq(as.POSIXct("2017-10-02 00:00:00"), as.POSIXct("2017-10-02 06:30:00"), by="30 min")); workaround; str(workaround) 

#substitute the following date for the time-gap date 2017-10-01 
workaround$isotime2 <-gsub("2017-10-02", "2017-10-01", workaround$isotime2); workaround; str(workaround) 

#change the vector "isotime2" from character to POSIXct magically makes time disappear 
workaround$isotime2 <-as.POSIXct(workaround$isotime2, format="%Y-%m-%d %H:%M:%S"); workaround; str(workaround) 

Habe ich irgendwie diese Zeitlücke geschaffen, oder weiß R etwas über eine Faltung in der Raumzeit? Ich habe geschlafen, als es passiert ist.

+4

Ich vermute, dass Sie in Australien sind. Die Uhren haben an diesem Tag in Australien die Sommerzeit geändert. – G5W

+0

@ G5W danke, ja ich bin in Australien, und ich habe mich gefragt, aber ich habe keine Zeitzone im Code angegeben, und wir haben einige Zustände, die für Sommerzeit ändern, und andere, die nicht ändern. Vielleicht weiß ich, dass ich in einem Zustand mit Sommerzeit bin. Meine Daten stammen aus einem Status, der dies nicht tut. Wenn ich 'tz =" Australia/Perth "einschließe, wird es nicht repariert. – ptenax

+2

Sehen Sie sich Ihre Gebietsschema-Informationen von 'sessionInfo()' an. Dies kann sich darauf auswirken, wie die Zonen interpretiert werden. Wo genau hast du das 'tz =' hingelegt und was war das Ergebnis, das du gegen das bekommen hast, was du erwartet hast? – MrFlick

Antwort

1

Weil @ptenax so schön gefragt ...

eine Zeitzone verwenden, die mit Sommer nicht ändert (seien wir ehrlich, der Fluch der Existenz jeder bei der Codierung).

Der erste data.frame verwendet Australien/ACT tz, der um 2 Uhr morgens umschaltet, der zweite data.frame verwendet Austalia/Perth tz, der sich bei Sommerzeit nicht ändert.

missing.times <- data.frame(isotime2=seq(as.POSIXct("2017-09-30 17:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/ACT"), as.POSIXct("2017-10-01 06:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/ACT"), by="30 min")) 
nrow(missing.times) 
missing.times 
# misses 2:00 and 2:30 

missing.times <- data.frame(isotime2=seq(as.POSIXct("2017-09-30 17:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/Perth"), as.POSIXct("2017-10-01 06:30:00", format="%Y-%m-%d %H:%M:%S", tz="Australia/Perth"), by="30 min")) 
nrow(missing.times) 
missing.times 
# does not miss 2:00 and 2:30 
+0

Danke schön @Nova. Ich habe die Option "tz" nur einmal anstatt zweimal eingegeben. Wie albern. Danke für die Zeit. – ptenax

+0

Ich habe so viel mit Zeitzonen gekämpft Ich fühle mich wie alles, was ich tun kann, um es für andere weniger schmerzhaft zu machen ...: P – Nova

+0

Danke - Ich habe gesehen, dass du vorher auch eine Frage über Daylight Saving gestellt hast. – ptenax