2016-04-05 8 views
0

Ich habe Schwierigkeiten beim Formatieren einen Datetime-Variable, die ursprünglich aus Excel kam:ordnungsgemäß für Datum und Uhrzeit Variable von Excel R

Die Daten wurden gelesen von Excel-Paket mit openxlsx mit der detectDates = FALSE Option. In der ursprünglichen Excel-Datei sehen sie wie folgt aus:

udate  utime 
1/30/2015 4:48:44 PM 
1/29/2015 4:17:23 PM 

Und das ist, wie sie aussehen, wenn sie in R importiert mit den detectDates = FALSE

#-----------------------------------------------------------------------------------------# 
# EXAMPLE DATA 
#-----------------------------------------------------------------------------------------# 
udate <- c(42034, 42033) 
utime <- c(0.7005093, 0.6787384) 

#-----------------------------------------------------------------------------------------# 
# FORMAT DATE 
#-----------------------------------------------------------------------------------------# 
udate <- as.Date(udate - 25569, origin = "1970-01-01") 

> udate 
[1] "2015-01-30" "2015-01-29" 

#-----------------------------------------------------------------------------------------# 
# FORMAT TIME 
#-----------------------------------------------------------------------------------------# 
utime <- as.POSIXct((utime - 25569) * 86400, tz="GMT", origin="1970-01-01") 

> utime 
[1] "1899-12-30 16:48:45 GMT" "1899-12-30 16:17:23 GMT" 

Wie man die Zeit sehen können nicht in vollem Umfang arbeiten (dh die Datumskomponente der Zeit funktioniert nicht). Wie kann ich eine einzelne Variable richtig mit dem richtigen Datum und der richtigen Zeit haben? Es scheint so, als würde man einfach 116 Jahre hinzufügen, aber ich weiß, dass es nicht so einfach ist, weil ich vermute, dass Datumsformate in Millisekunden gemessen werden.

Antwort

1

Es gibt kein Zeitobjekt. POSIXct ist eine Datetime-Klasse, d.h. sie muss ein Datum und eine Zeit enthalten.

as.POSIXct(
    as.POSIXlt(
    as.Date(udate, origin = "1899-12-30"), #see ?as.Date 
    tz = "GMT"), 
    tz = "GMT") + utime * 3600 * 24 
#[1] "2015-01-30 16:48:44 GMT" "2015-01-29 16:17:22 GMT" 

Zeiten ohne Daten funktionieren nicht aufgrund von lustigen Dingen wie DST oder Schaltsekunden.

+0

Dank @Roland, das hat funktioniert. –