varias superponer studio modificar lineas graficos graficas ejes r timestamp average sliding-window

studio - superponer graficas en r



Promedio de campo en ventana de media hora de marcas de tiempo (2)

Como advirtió smci, cuanta menos información agregue sobre sus datos, más limitada puede ser la ayuda. Este es un enfoque de base R que crea intervalos de 30 minutos a partir de las fechas proporcionadas. Por lo tanto, los intervalos vacíos no aparecerán (dependiendo de su resultado deseado esto puede ayudar o no). La función agregada aplica la media por los intervalos de grupo deseados. Expandí tu ejemplo para incorporar más intervalos de prueba:

cuts <- seq(round(min(df$Timestamp), "hours"), max(df$Timestamp)+30*60, "30 min") aggregate(df$es, list(cut(df$Timestamp, cuts)), mean) # Group.1 x #1 2015-04-01 09:00:00 31.00 #2 2015-04-01 10:00:00 29.50 #3 2015-04-01 11:00:00 13.65 #4 2015-04-01 13:00:00 9.60

Datos

df <- structure(list(Timestamp = structure(c(1427893662, 1427897281, 1427901303, 1427901605, 1427908509), class = c("POSIXct", "POSIXt" ), tzone = ""), es = c(31, 29.5, 18.5, 8.8, 9.6)), .Names = c("Timestamp", "es"), row.names = c(NA, -5L), class = "data.frame")

Mi dataframe tiene nombres de columna Timestamp, es y se ve así:

Timestamp es 2015-04-01 09:07:42 31 2015-04-01 09:08:01 29.5 2015-04-01 09:15:03 18.5 2015-04-01 09:15:05 8.8 2015-04-01 09:15:09 9.6

El tiempo corre hasta las 15:30:30 (alrededor de 12000 puntos de datos contra cada marca de tiempo por día) y las es correspondientes.

¿Tiene R alguna función en algún paquete o código para promediar las es de todas las marcas de tiempo dentro de media hora? La salida de muestra debe verse así:

2015-04-01 09:30:00 Value(Average of all es from 9:00 to 9:30) 2015-04-01 10:00:00 Value(Average of all es from 9:30 to 10:00) 2015-04-01 10:30:00 Value(Average of all es from 10:00 to 10:30) ... (the list goes on till 15:30:30)


Hay 48 ventanas fijas de media hora en cada fecha. (En realidad, sus ventanas son fijas, ni siquiera se deslizan.) Parece un conjunto de datos comerciales, por lo que solo quiere ventanas de tiempo de 09: 00-09: 30 a 15: 30-16: 00 (?), Por lo tanto, solo 14 ventanas en cada fecha.

Usted acaba de crear esas ventanas de fecha y hora con lubridate::interval , luego haga una combinación-aplicación-dividir (agregación) usando dplyr/data.table para obtener la media dentro de cada ventana.

Si publica un ejemplo reproducible , publicaré el código.

Un punto:

  • Tenga cuidado de que si una ventana está vacía, si desea un promedio de 0, no de NA, o de lo contrario, esas ventanas (de mercado cerrado) deben omitirse del resultado. También quiere excluir fines de semana y feriados de mercado. Si sus datos son escasos, tendrá que construir esas fechas usted mismo.