Vou começar com a segunda pergunta, que é mais fácil. Usando o
dplyr
pacote, você pode usar top_n
para obter as n maiores linhas de uma determinada coluna. Por exemplo:> 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
Observe que você obterá mais de n linhas se houver empates para o enésimo lugar. Assim
top_n(p_ash_r_100, 10, SMPL_CNT)
retornará todo o conjunto de dados de amostra devido ao empate de 17 vias para o 4º. Quanto à primeira pergunta, a documentação para
geom_area
dá uma pista:Isso sugere que
geom_area
espera que a coluna mapeada para x seja numérica. Com base na listagem de p_ash_r_100
, SMPL_TIME
parece ser um vetor de caracteres. Com o lubridate
pacote, podemos converter SMPL_TIME
para uma data e hora com dmy_hm
:p_ash_r_100a <- p_ash_r_100 %>%
mutate_at(vars(SMPL_TIME), dmy_hm)
No entanto, isso não é suficiente para obter o gráfico desejado, pois existem vários valores de
y
para cada combinação de x
e fill
(que é a estética correta para geom_area
, não "col
"). Precisamos resumir os dados antes de plotar:p_ash_r_100a %>%
group_by(SMPL_TIME, EVENT) %>%
summarise(total = sum(SMPL_CNT)) %>%
ggplot(aes(SMPL_TIME, total, fill = EVENT)) +
geom_area()
No entanto, o enredo ainda não está correto. Isso ocorre porque cada combinação de
SMPL_TIME
e EVENT
não é representado no conjunto de dados. Precisamos informar explicitamente geom_area
que y
é igual a zero para as linhas ausentes. Uma maneira é usar o prático fill
argumento em 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()