¿Cómo extraería la hora de una serie de objetos POSIXct descartando la parte de la fecha?
Por ejemplo, tengo:
times <- structure(c(1331086009.50098, 1331091427.42461, 1331252565.99979,
1331252675.81601, 1331262597.72474, 1331262641.11786, 1331269557.4059,
1331278779.26727, 1331448476.96126, 1331452596.13806), class = c("POSIXct",
"POSIXt"))
que corresponde a estas fechas:
"2012-03-07 03:06:49 CET" "2012-03-07 04:37:07 CET"
"2012-03-09 01:22:45 CET" "2012-03-09 01:24:35 CET"
"2012-03-09 04:09:57 CET" "2012-03-09 04:10:41 CET"
"2012-03-09 06:05:57 CET" "2012-03-09 08:39:39 CET"
"2012-03-11 07:47:56 CET" "2012-03-11 08:56:36 CET"
Ahora, tengo algunos valores para un parámetro medido en esos momentos
val <- c(1.25343125e-05, 0.00022890575,
3.9269125e-05, 0.0002285681875,
4.26353125e-05, 5.982625e-05,
2.09575e-05, 0.0001516951251,
2.653125e-05, 0.0001021391875)
Me gustaría graficar val frente a la hora del día, independientemente del día específico en el que se midió val.
¿Existe una función específica que me permita hacer eso?
lubridate
, parece un paquete interesante.Se han proporcionado muchas soluciones, pero no he visto esta, que usa el paquete chron:
hours = times(strftime(times, format="%T")) plot(val~hours)
(lo siento, no tengo derecho a publicar una imagen, tendrás que trazarla tú mismo)
fuente
El
time_t
valor de la medianoche GMT siempre es divisible por86400
(24 * 3600
). El valor de segundos desde la medianoche GMT es asítime %% 86400
.La hora en GMT es
(time %% 86400) / 3600
y esto se puede usar como el eje x del gráfico:plot((as.numeric(times) %% 86400)/3600, val)
Para ajustar una zona horaria, ajuste la hora antes de tomar el módulo, agregando la cantidad de segundos en que su zona horaria está por delante de GMT. Por ejemplo, el horario de verano central de EE. UU. (CDT) está 5 horas por detrás de GMT. Para graficar contra el tiempo en CDT, se usa la siguiente expresión:
plot(((as.numeric(times) - 5*3600) %% 86400)/3600, val)
fuente