Wie würden Sie stündliche Mittelwerte für mehrere Datenspalten für einen täglichen Zeitraum erhalten und die Ergebnisse für zwölf "Hosts" in derselben Grafik anzeigen? Das heißt, ich möchte für Daten im Wert von mehreren Wochen grafisch darstellen, wie ein 24-Stunden-Zeitraum aussieht. Das letztendliche Ziel wäre es, zwei Sätze dieser Daten vor und nach der Probenahme zu vergleichen.
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
Ich konnte xyplot (CPUUser ~ dates | Host) mit gutem Effekt ausführen. Anstatt jedoch jedes Datum in der Woche anzuzeigen, möchte ich, dass die X-Achse die Stunden des Tages darstellt.
Der Versuch, diese Daten in ein xts-Objekt zu übertragen, führt zu Fehlern wie "order.by erfordert ein geeignetes zeitbasiertes Objekt".
Hier ist ein str () des Datenrahmens:
'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 ...
UPDATE: Nur zum späteren Nachschlagen habe ich mich für einen Boxplot entschieden, um sowohl den Median als auch die "Ausreißer" anzuzeigen.
Im Wesentlichen:
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)
Vielen Dank
quelle
xts()
weil diedates
Spalte ein Faktor ist.str()
den data.frame an.Antworten:
Hier ist ein Ansatz, der cut () verwendet, um die entsprechenden stündlichen Faktoren und ddply () aus der Plyr-Bibliothek zur Berechnung der Mittelwerte zu erstellen.
quelle
Die Aggregation funktioniert auch ohne Verwendung von
zoo
(mit Zufallsdaten aus 2 Variablen für 3 Tage und 4 Hosts wie bei JWM). Ich gehe davon aus, dass Sie für jede Stunde Daten von allen Hosts haben.Ich bin mir nicht ganz sicher, ob Sie den Durchschnitt nur innerhalb einer Stunde oder innerhalb einer Stunde über alle Tage berechnen möchten. Ich mache beides.
Das Ergebnis sieht so aus:
Ich bin mir auch nicht ganz sicher, welche Art von Grafik Sie verwenden möchten. Hier ist die Bare-Bones-Version eines Diagramms für nur die erste Variable mit separaten Datenzeilen für jeden Host.
Dieselbe Grafik für die Daten, die nur innerhalb einer Stunde gemittelt werden.
quelle
Sie können die
aggregate.zoo
Funktion aus dem Paket auscheckenzoo
: http://cran.r-project.org/web/packages/zoo/zoo.pdfCharlie
quelle
aggregate.zoo
Funktion nicht wirklich benutzt , obwohl ich daszoo
Paket benutzt habe. Haben Sie zuerst sichergestellt, dass es sich bei Ihrem Objekt um einzoo
Objekt handelt? Die Dokumentation, auf die ich verwiesen habe, sollte Ihnen dabei helfen.