2016-05-13 8 views
0

Ich lese einige JSON-Daten in R, und es speichert Datetime-Informationen als separate Zeitkomponenten (Jahr, Monat, Stunde, etc.). Da ich bereits die einzelnen Teile habe, scheint es einfach zu sein, ein POSIXlt-Objekt zu erstellen, da letzteres nur eine Liste von Zeitkomponenten ist.Erstellen Sie einen POSIXlt aus einer Liste von Zeitkomponenten

as.POSIXlt akzeptiert keine benannte Liste oder einen Vektor von Komponenten. Es ist möglich, einen POSIXlt zu erstellen, indem die entsprechende Klasse und attr zu einer Liste hinzugefügt wird, aber es schlägt ohne die wday- und yday-Elemente fehl, die ich nicht habe.

Ich bin mir bewusst, dass ich die Liste in eine Zeichenfolge konvertieren und analysieren kann, aber das ist so unelegant eine Lösung Ich dachte, ich würde sicherstellen, dass es keinen besseren Weg gab.

Bearbeiten: ISOdatetime ist genau das, was ich gesucht habe. Vielen Dank!

+0

Können Sie einige Beispieldaten posten? Also können wir tatsächlich Arbeitscode zur Verfügung stellen? – Gopala

+0

Ich denke nicht, dass das einen Unterschied machen wird. Ich habe bereits eine Lösung gehackt, die funktioniert (in meiner Frage erwähnt). Ich habe mich nur gefragt, ob R-Experten einen besseren Weg vorschlagen könnten. – user862507

+0

Wenn Sie den Stack-Überlauf verwenden möchten, um Hilfe zu erhalten, befolgen Sie am besten die Richtlinien für ein reproduzierbares Beispiel. Ich habe dir vorgeschlagen, das zu tun. Das ist alles. – Gopala

Antwort

1

isodate ist der Befehl zu verwenden:

ISOdate(year, month, day, hour = 12, min = 0, sec = 0, tz = "GMT") 

Die Funktion gibt einen POSIXct Typ. Siehe ISOdate für weitere Informationen.

+0

Super! Dies ist bei Suchanfragen nicht aufgetreten. ISOdatetime macht dasselbe ohne Standardwerte für Stunde/Minute/Sekunde. Perfekt. Vielen Dank! – user862507

0

Die isodate oder ISOdatetime Funktionen sind eindeutig diejenigen zu verwenden, aber da Sie gefragt, wie es mit POSIXlt als Ausgangspunkt zu tun, hier ist ein bisschen Hacking:

test <- as.POSIXlt("1970-01-01") 
dput(test) 
structure(list(sec = 0, min = 0L, hour = 0L, mday = 1L, mon = 0L, 
    year = 70L, wday = 4L, yday = 0L, isdst = 0L, zone = "PST", 
    gmtoff = NA_integer_), .Names = c("sec", "min", "hour", "mday", 
"mon", "year", "wday", "yday", "isdst", "zone", "gmtoff"), class = c("POSIXlt", 
"POSIXt")) 
test$year <- 1941 
test$mon <- 12 
test$mday <-7 
test 
#[1] "3842-01-07 PST" Wrong offset 
test$year <- 41 
test 
#[1] "1942-01-07 PST" "An infamous date" 

Ich vermute, das „falsche“ ist. in dem ich bezweifle, dass der Wochentag oder andere Listenelemente richtig rejiggered werden.

Verwandte Themen