Inizierò con la seconda domanda, che è più semplice. Usando il dplyr
pacchetto, puoi usare top_n
per ottenere le n righe più grandi per una determinata colonna. Ad esempio:
> 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
Nota che otterrai più di n righe se ci sono pareggi per l'ennesima posizione. Quindi top_n(p_ash_r_100, 10, SMPL_CNT)
restituirà l'intero set di dati di esempio a causa del pareggio a 17 vie per il 4° posto.
Per quanto riguarda la prima domanda, la documentazione per geom_area
fornisce un indizio:
Ciò suggerisce che geom_area
prevede che la colonna mappata su x dovrebbe essere numerica. Basato sull'elenco per p_ash_r_100
, SMPL_TIME
sembra essere un vettore di caratteri. Con il lubridate
pacchetto, possiamo convertire SMPL_TIME
a una data e ora con dmy_hm
:
p_ash_r_100a <- p_ash_r_100 %>%
mutate_at(vars(SMPL_TIME), dmy_hm)
Tuttavia, questo non è sufficiente per ottenere la trama che desideri poiché ci sono più valori di y
per ogni combinazione di x
e fill
(che è l'estetica corretta per geom_area
, non "col
"). Dobbiamo riassumere i dati prima di tracciare:
p_ash_r_100a %>%
group_by(SMPL_TIME, EVENT) %>%
summarise(total = sum(SMPL_CNT)) %>%
ggplot(aes(SMPL_TIME, total, fill = EVENT)) +
geom_area()
Eppure la trama non è ancora corretta. Questo perché ogni combinazione di SMPL_TIME
e EVENT
non è rappresentato nel set di dati. Dobbiamo dirlo esplicitamente a geom_area
quel y
è uguale a zero per le righe mancanti. Un modo è usare il pratico fill
argomento 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()