Ich beginne mit der zweiten Frage, die einfacher ist. Mit dplyr
Paket, können Sie top_n
verwenden um die n größten Zeilen für eine bestimmte Spalte zu erhalten. Zum Beispiel:
> top_n(p_ash_r_100a, 3, SMPL_CNT) %>% arrange(desc(SMPL_CNT))
# A tibble: 3 × 5
SMPL_TIME SQL_ID MODULE EVENT SMPL_CNT
<dttm> <chr> <chr> <chr> <int>
1 2017-04-11 09:01:00 NO_SQL GoldenGate CPU 7
2 2017-04-11 09:00:00 dgzp3at57cagd GoldenGate db file sequential read 2
3 2017-04-11 09:01:00 37cspa0acgqxp GoldenGate db file sequential read 2
Beachten Sie, dass Sie mehr als n Zeilen erhalten, wenn es Gleichstände für den n-ten Platz gibt. Also top_n(p_ash_r_100, 10, SMPL_CNT)
gibt aufgrund der 17-Wege-Gleichung für Platz 4 den gesamten Beispieldatensatz zurück.
Was die erste Frage betrifft, die Dokumentation für geom_area
liefert einen Anhaltspunkt:
Dies legt nahe, dass geom_area
erwartet, dass die x zugeordnete Spalte numerisch sein sollte. Basierend auf der Auflistung für p_ash_r_100
, SMPL_TIME
scheint ein Zeichenvektor zu sein. Mit dem lubridate
Paket können wir SMPL_TIME
umwandeln zu einer Datumszeit mit dmy_hm
:
p_ash_r_100a <- p_ash_r_100 %>%
mutate_at(vars(SMPL_TIME), dmy_hm)
Dies reicht jedoch nicht aus, um den gewünschten Plot zu erhalten, da es mehrere Werte von y
gibt für jede Kombination von x
und fill
(das ist die korrekte Ästhetik für geom_area
, nicht "col
"). Wir müssen die Daten vor dem Plotten zusammenfassen:
p_ash_r_100a %>%
group_by(SMPL_TIME, EVENT) %>%
summarise(total = sum(SMPL_CNT)) %>%
ggplot(aes(SMPL_TIME, total, fill = EVENT)) +
geom_area()
Doch die Handlung stimmt noch immer nicht. Dies liegt daran, dass jede Kombination von SMPL_TIME
und EVENT
ist im Datensatz nicht vertreten. Wir müssen geom_area
ausdrücklich mitteilen dass y
für diese fehlenden Zeilen gleich Null ist. Eine Möglichkeit besteht darin, das praktische fill
zu verwenden Argument in tidyr::spread
.
group_by(p_ash_r_100a, SMPL_TIME, EVENT) %>%
summarise(smpl_sum = sum(SMPL_CNT)) %>%
spread(EVENT, smpl_sum, fill = 0) %>%
gather(EVENT, smpl_sum, CPU, `db file sequential read`,
`direct path write`,
`Log archive I/O`) %>%
ggplot(aes(x = SMPL_TIME, y = smpl_sum, fill = EVENT)) +
geom_area()