¿Cómo obtendrías los medios por hora para múltiples columnas de datos, durante un período diario, y mostrarías los resultados de doce "Hosts" en el mismo gráfico? Es decir, me gustaría graficar cómo se ve un período de 24 horas, para una semana de datos. El objetivo final sería comparar dos conjuntos de estos datos, antes y después de los muestreos.
dates Host CPUIOWait CPUUser CPUSys
1 2011-02-11 23:55:12 db 0 14 8
2 2011-02-11 23:55:10 app1 0 6 1
3 2011-02-11 23:55:09 app2 0 4 1
He podido ejecutar xyplot (CPUUser ~ date | Host) con buen efecto. Sin embargo, en lugar de mostrar cada fecha de la semana, me gustaría que el eje X sea las horas del día.
Intentar obtener estos datos en un objeto xts produce errores como "order.by requiere un objeto basado en el tiempo apropiado"
Aquí hay un str () del marco de datos:
'data.frame': 19720 obs. of 5 variables:
$ dates : POSIXct, format: "2011-02-11 23:55:12" "2011-02-11 23:55:10" ...
$ Host : Factor w/ 14 levels "app1","app2",..: 9 7 5 4 3 10 6 8 2 1 ...
$ CPUIOWait: int 0 0 0 0 0 0 0 0 0 0 ...
$ CPUUser : int 14 6 4 4 3 10 4 3 4 4 ...
$ CPUSys : int 8 1 1 1 1 3 1 1 1 1 ...
ACTUALIZACIÓN: Solo para referencia futura, decidí ir con un diagrama de caja, para mostrar tanto la mediana como los "valores atípicos".
Esencialmente:
Data$hour <- as.POSIXlt(dates)$hour # extract hour of the day
boxplot(Data$CPUUser ~ Data$hour) # for a subset with one host or for all hosts
xyplot(Data$CPUUser ~ Data$hour | Data$Host, panel=panel.bwplot, horizontal=FALSE)
Gracias
fuente
xts()
porque ladates
columna es un factor.str()
el data.frame.Respuestas:
Aquí hay un enfoque que usa cut () para crear los factores horarios apropiados y ddply () de la biblioteca plyr para calcular las medias.
fuente
La agregación también funciona sin usar
zoo
(con datos aleatorios de 2 variables durante 3 días y 4 hosts como de JWM). Supongo que tiene datos de todos los hosts para cada hora.No estoy del todo seguro si desea promediar solo dentro de cada hora, o dentro de cada hora durante todos los días. Yo haré las dos cosas.
El resultado se ve así:
Tampoco estoy completamente seguro sobre el tipo de gráfico que desea. Aquí está la versión básica de un gráfico para solo la primera variable con líneas de datos separadas para cada host.
El mismo gráfico para los datos que solo se promedian en cada hora.
fuente
Puede verificar la
aggregate.zoo
función desde el paquetezoo
: http://cran.r-project.org/web/packages/zoo/zoo.pdfCharlie
fuente
aggregate.zoo
función, aunque sí he usado elzoo
paquete. ¿Se aseguró de que su objeto fuerazoo
primero un objeto? La documentación que señalé debería ayudarlo allí.