Jag börjar med den andra frågan, som är lättare. Använda dplyr
paketet kan du använda top_n
för att få de n största raderna för en given kolumn. Till exempel:
> 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
Observera att du får fler än n rader om det är oavgjort på n:e plats. Alltså top_n(p_ash_r_100, 10, SMPL_CNT)
kommer att returnera hela provdatauppsättningen på grund av den 17-vägsmässiga kopplingen för 4:an.
När det gäller den första frågan, dokumentationen för geom_area
ger en ledtråd:
Detta tyder på att geom_area
förväntar sig att kolumnen som mappas till x ska vara numerisk. Baserat på listan för p_ash_r_100
, SMPL_TIME
verkar vara en teckenvektor. Med lubridate
paket, kan vi konvertera SMPL_TIME
till en datum-tid med dmy_hm
:
p_ash_r_100a <- p_ash_r_100 %>%
mutate_at(vars(SMPL_TIME), dmy_hm)
Detta är dock inte tillräckligt för att få den plot du vill ha eftersom det finns flera värden för y
för varje kombination av x
och fill
(vilket är den korrekta estetiken för geom_area
, inte "col
"). Vi måste sammanfatta data innan vi plottar:
p_ash_r_100a %>%
group_by(SMPL_TIME, EVENT) %>%
summarise(total = sum(SMPL_CNT)) %>%
ggplot(aes(SMPL_TIME, total, fill = EVENT)) +
geom_area()
Ändå är handlingen fortfarande inte korrekt. Detta beror på att varje kombination av SMPL_TIME
och EVENT
är inte representerad i datamängden. Vi måste uttryckligen berätta för geom_area
att y
är lika med noll för de rader som saknas. Ett sätt är att använda den praktiska fill
argument i 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()