Pregunta

En la mayoría de los casos, convertimos el tiempo numérico al formato posixct usando R. Sin embargo, a veces, queremos comparar qué punto de tiempo es anterior, entonces preferimos el formato de tiempo numérico.Por lo tanto, es una cuestión bastante práctica convertir el formato de hora en numérico.Por ejemplo, tengo el formato de datos como "2001-03-13 10:31:00",

  begin <- "2001-03-13 10:31:00"

Usando R, quiero descubrir cómo convertirlo en un número, p. ej.el tiempo juliano, algo así como los segundos que pasan entre 1970-01-01 00:00:00 y 2001-03-13 10:31:00.

¿Tiene alguna sugerencia?


El calendario juliano comenzó en el 45 a. C. (709 AUC) como una reforma del calendario romano por parte de Julio César.Fue elegido después de consultar con el astrónomo Sosigenes de Alejandría y probablemente fue diseñado para aproximarse al año tropical (conocido al menos desde Hiparco).consulte http://en.wikipedia.org/wiki/Julian_calendar

¿Fue útil?

Solución

Si solo desea eliminar ":", "" y "-" de un vector de caracteres, entonces será suficiente:

end <- gsub("[: -]", "" , begin, perl=TRUE)
#> end
#[1] "20010313103100"

Debería leer la sección acerca de 1/4 del camino hacia abajo en? regex sobre clases de caracteres .Dado que el "-" es especial en ese contexto como operador de rango, debe colocarse en primer o último lugar.

Después de su edición, la respuesta es claramente lo que escribió @joran, excepto que primero necesitaría convertir a una clase DateTime:

 as.numeric(as.POSIXct(begin))
#[1] 984497460

El otro punto a destacar es que los operadores de comparación funcionan para las variables clasificadas Date y DateTime, por lo que la conversión puede no ser necesaria en absoluto.Esto compara "comenzar" con una hora un segundo después y, correctamente, los informes que comienzan es antes:

as.POSIXct(begin) < as.POSIXct(begin) +1
 #[1] TRUE

Otros consejos

Según la pregunta revisada, esto debería hacer lo que desea:

begin <- "2001-03-13 10:31:00"
as.numeric(as.POSIXct(begin))

El resultado es una marca de tiempo Unix, la cantidad de segundos desde la época, asumiendo que la marca de tiempo está en la zona horaria local.

El ejemplo de la ayuda de ?as.POSIX da

as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S"))

para ti sería

as.numeric(as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S")))

Quizás esto también podría funcionar:

library(lubridate)
...
df <- '24:00:00'

as.numeric(hms(df))

hms () convertirá sus datos de un formato de hora a otro, esto le permitirá convertirlos en segundos.Consulte la documentación completa.

Probé esto porque tuve problemas con los datos que estaban en ese formato pero durante 24 horas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top