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()

