He seguido una serie de preguntas aquí sobre cómo convertir vectores de caracteres en clases de fecha y hora. A menudo veo 2 métodos, los métodos strptime y as.POSIXct / as.POSIXlt. Miré las 2 funciones pero no tengo claro cuál es la diferencia.
strptime
function (x, format, tz = "")
{
y <- .Internal(strptime(as.character(x), format, tz))
names(y$year) <- names(x)
y
}
<bytecode: 0x045fcea8>
<environment: namespace:base>
como.POSIXct
function (x, tz = "", ...)
UseMethod("as.POSIXct")
<bytecode: 0x069efeb8>
<environment: namespace:base>
como.POSIXlt
function (x, tz = "", ...)
UseMethod("as.POSIXlt")
<bytecode: 0x03ac029c>
<environment: namespace:base>
Haciendo un microbenchmark para ver si hay diferencias de rendimiento:
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 parece un poco más rápido. entonces que da ¿Por qué habría 2 funciones similares o hay diferencias entre ellas que me perdí?
r
date
time
benchmarking
RJ-
fuente
fuente

as.POSIXctyas.POSIXlten los vectores de caracteres, mireas.POSIXct.defaultyas.POSIXlt.character, respectivamente.Respuestas:
Bueno, las funciones hacen cosas diferentes.
Primero, hay dos implementaciones internas de fecha / hora:,
POSIXctque almacena segundos desde la época de UNIX (+ algunos otros datos), yPOSIXlt, que almacena una lista de día, mes, año, hora, minuto, segundo, etc.strptimees una función para convertir directamente vectores de caracteres (de una variedad de formatos) aPOSIXltformato.as.POSIXltconvierte una variedad de tipos de datos aPOSIXlt. Intenta ser inteligente y hacer lo sensato; en el caso del personaje, actúa como un envoltorio parastrptime.as.POSIXctconvierte una variedad de tipos de datos aPOSIXct. También intenta ser inteligente y hacer lo sensato: en el caso del personaje, se ejecutastrptimeprimero y luego realiza la conversión dePOSIXltaPOSIXct.Tiene sentido que
strptimesea más rápido, porquestrptimesolo maneja la entrada de caracteres mientras que los otros intentan determinar qué método usar desde el tipo de entrada. También debería ser un poco más seguro, ya que recibir datos inesperados solo daría un error, en lugar de intentar hacer algo inteligente que podría no ser lo que desea.fuente
Hay dos tipos de POSIXt, POSIXct y POSIXlt. "ct" puede representar el tiempo del calendario, almacena el número de segundos desde el origen. "lt", u hora local, mantiene la fecha como una lista de atributos de hora (como "hora" y "lun"). Prueba estos ejemplos:
fuente