Ich habe hier eine Reihe von Fragen beantwortet, in denen gefragt wird, wie Zeichenvektoren in Datums- / Uhrzeitklassen konvertiert werden sollen. Ich sehe oft 2 Methoden, die strptime und die as.POSIXct / as.POSIXlt Methoden. Ich habe mir die 2 Funktionen angesehen, bin mir aber nicht sicher, was der Unterschied ist.
strptime
function (x, format, tz = "")
{
y <- .Internal(strptime(as.character(x), format, tz))
names(y$year) <- names(x)
y
}
<bytecode: 0x045fcea8>
<environment: namespace:base>
as.POSIXct
function (x, tz = "", ...)
UseMethod("as.POSIXct")
<bytecode: 0x069efeb8>
<environment: namespace:base>
as.POSIXlt
function (x, tz = "", ...)
UseMethod("as.POSIXlt")
<bytecode: 0x03ac029c>
<environment: namespace:base>
Durchführen eines Mikrobenchmarks, um festzustellen, ob Leistungsunterschiede bestehen:
library(microbenchmark)
Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 5000, replace = TRUE)
df <- microbenchmark(strptime(Dates, "%d-%m-%Y"), as.POSIXlt(Dates, format = "%d-%m-%Y"), times = 1000)
Unit: milliseconds
expr min lq median uq max
1 as.POSIXlt(Dates, format = "%d-%m-%Y") 32.38596 33.81324 34.78487 35.52183 61.80171
2 strptime(Dates, "%d-%m-%Y") 31.73224 33.22964 34.20407 34.88167 52.12422
strptime scheint etwas schneller zu sein. Also, was gibt es? Warum sollte es 2 ähnliche Funktionen geben oder gibt es Unterschiede zwischen ihnen, die ich verpasst habe?
r
date
time
benchmarking
RJ-
quelle
quelle
as.POSIXct
undas.POSIXlt
auf Zeichenvektoren, Blick aufas.POSIXct.default
undas.POSIXlt.character
sind.Antworten:
Nun, die Funktionen machen verschiedene Dinge.
Erstens gibt es zwei interne Implementierungen von Datum / Uhrzeit:
POSIXct
Diese speichern Sekunden seit der UNIX-Epoche (+ einige andere Daten) undPOSIXlt
speichern eine Liste von Tag, Monat, Jahr, Stunde, Minute, Sekunde usw.strptime
ist eine Funktion zum direkten Konvertieren von Zeichenvektoren (in verschiedenen Formaten) in dasPOSIXlt
Format.as.POSIXlt
konvertiert eine Vielzahl von Datentypen inPOSIXlt
. Es versucht intelligent zu sein und das Vernünftige zu tun - im Falle eines Charakters wirkt es als Wrapper fürstrptime
.as.POSIXct
konvertiert eine Vielzahl von Datentypen inPOSIXct
. Es versucht auch, intelligent zu sein und das Vernünftige zu tun - im Falle eines Charakters läuft esstrptime
zuerst und führt dann die Konvertierung vonPOSIXlt
nach durchPOSIXct
.Es ist sinnvoll, dass dies
strptime
schneller ist, dastrptime
nur die Zeicheneingabe verarbeitet wird, während die anderen versuchen, anhand des Eingabetyps zu bestimmen, welche Methode verwendet werden soll. Es sollte auch ein bisschen sicherer sein, dass die Übergabe unerwarteter Daten nur einen Fehler darstellt, anstatt zu versuchen, das Intelligente zu tun, das möglicherweise nicht das ist, was Sie wollen.quelle
Es gibt zwei POSIXt-Typen, POSIXct und POSIXlt. "ct" kann für die Kalenderzeit stehen und speichert die Anzahl der Sekunden seit dem Ursprung. "lt" oder Ortszeit speichert das Datum als Liste von Zeitattributen (wie "Stunde" und "Montag"). Probieren Sie diese Beispiele aus:
quelle