2016-05-06 4 views
0

Ich bin Daten aus Excel importieren und dann versuchen, Daten und Uhrzeiten in R zu manipulieren, und es gibt mir so einen KOPFSCHMERZ. In der Excel-Datei enthielt eine Spalte ein Datum und eine Uhrzeit, und eine andere Spalte enthielt eine andere Zeit für denselben Tag. Die Daten in R sieht im Grunde wie in diesem Beispiel:Interconverting POSIXct und numerisch in R

mydata <- data.frame(DateTime1 = as.POSIXct(c("2014-12-13 04:56:00", 
             "2014-12-13 09:30:00", 
             "2014-12-13 11:30:00", 
             "2014-12-13 13:30:00"), 
             origin = "1970-01-01", tz = "GMT"), 
         Time2 = c(0.209, 0.209, 0.715, 0.715)) 

Ich möchte eine neue Spalte in POSIXct Format mit dem Datum haben und das 2. Mal, und das kann ich nicht an die Arbeit. Ich habe versucht:

mydata$DateTime2 <- as.POSIXct(as.numeric(as.Date(mydata$DateTime1) 
          + mydata$Time2), origin = "1970-01-01", 
          tz = "GMT") 

aber das gibt mir Daten und Zeiten in der Nähe von 1/1/1970.

Das ist mehr gewunden, aber eine Sache, die in anderen ähnlichen Situationen gearbeitet hat, die ich auch versucht habe, ist:

library(lubridate) 
mydata$DateTime2 <- ymd_hms(format(as.POSIXct(as.Date(mydata$DateTime1) + 
               mydata$Time2, 
         origin = "1899-12-30", tz = "GMT"))) 

aber das gibt mir Daten und Zeiten, die außerhalb der Geschäftszeiten von 8 sind. Dieser Zeitunterschied lässt mich denken, dass das Problem die Zeitzone ist, seit ich Pacific Standard Time bin, aber ich setze es zu GMT sowohl in den Eingabedaten als auch beim Konvertieren! Was gibt? Ich zögere, nur 8 Stunden zu allem wegen der Sommerzeitkomplikationen hinzuzufügen.

Wirklich scheinen beide Versuche, die ich hier listet, Probleme mit der Umwandlung zu haben, dh wenn Sie mit einem POSIXct-Objekt beginnen und es in numerisch konvertieren und dann wieder in POSIXct konvertieren, sollten Sie wieder zurückkommen wo du angefangen hast und du nicht. Wenn Sie mit der Zeitzone GMT beginnen und dann etwas hinzufügen, das auch die Zeitzone als GMT hat, sollten Sie kein Problem mit Dingen haben, die auf mysteriöse Weise in die Systemzeitzone konvertiert werden.

Beratung?

+0

Untersuchen Sie 'unclass (DateTime1)' vor und nach der Konvertierung. Es sollten die gleichen zugrunde liegenden Zahlen (technisch "numerisch") vorher und nachher sein. Wenn das so ist, ist es nur eine Frage der richtigen Zeitzone/Herkunft. – MichaelChirico

+0

Vielen Dank für den Vorschlag, aber ich sehe keinen Unterschied zwischen der Aufnahme von 'unclass (...' und nicht einschließlich. – LauraS

+0

Ich mag Missverständnis, aber warum konnte man 'Time2' nicht einfach zu' DateTime1' hinzufügen '' Ich bin mir nicht sicher, ob die Einheiten von 'Time2', sondern nur Tage sind, nur zur Illustration. Dann,' mydata $ DateTime2 = mydata $ DateTime1 + mydata $ Time2 * 24 * 60 * 60' (weil POSIXct ist in Sekunden, also konvertieren wir 'Time2' in Sekunden) – eipi10

Antwort

0

fand ich eine Antwort basierend auf Antwort chris Holbrook hier: How do you convert dates/times from one time zone to another in R?

Das funktionierte:

mydata$DateTime2 <- as.POSIXct(as.Date(mydata$DateTime1) + 
           mydata$Time2) 
attributes(mydata$DateTime2)$tzone <- "GMT" 

@MichaelChirico und ich war richtig, dass die Zeitzone das Problem war. Ich bin mir immer noch nicht sicher warum, aber die Zeitzone für DateTime2 war anscheinend PST. Es nicht Liste "PST", als ich überprüfte str(mydata$DateTime2), aber auf der Zeitdifferenz basiert, muss es in der Tat PST gewesen sein, bis ich die Attribute gesetzt habe. Verrückt. Es tat, obwohl DateTime1 GMT war.

Verwandte Themen