Вопрос не совсем ясен, но следующий код выдает два графика, один из которых составляет всего Class
за Weekday
, а другой - всего Class
за час дня.
I первый столбец приведения Class
к классу "integer"
, в вашем выводе str(data)
это "factor"
.
library(tidyverse)
library(lubridate)
data$Class <- as.integer(as.character(data$Class))
data$Weekday <- format(data$Timestamp, "%a")
data$Hour <- hour(data$Timestamp)
Теперь графики.Сначала по рабочим дням.
aggregate(Class ~ Weekday, data, sum) %>%
ggplot(aes(Weekday, Class)) +
geom_col()
И по часам.
aggregate(Class ~ Hour, data, sum) %>%
ggplot(aes(Hour, Class)) +
geom_col()
Редактировать.
Приведенные выше графики также могут быть получены без изменения исходного набора данных data
.Они будут производиться в результате более крупной трубы, но, возможно, проще или предпочтительнее сделать это следующим образом.
Начиная с исходных данных.
data$Class <- as.integer(as.character(data$Class))
data %>%
mutate(Weekday = format(Timestamp, "%a")) %>%
group_by(Weekday) %>%
summarise(Class = sum(Class)) %>%
ggplot(aes(Weekday, Class)) +
geom_col()
data %>%
mutate(Hour = hour(Timestamp)) %>%
group_by(Hour) %>%
summarise(Class = sum(Class)) %>%
ggplot(aes(Hour, Class)) +
geom_col()
Код генерации данных.
set.seed(1234) # Make the results reproducible
n <- 1e3
start <- as.POSIXct("2018-01-01 00:00:00")
end <- Sys.time()
Timestamp <- sample(seq(start, end, by = "min"), n, TRUE)
Class <- factor(sample(0:1, n, TRUE))
data <- data.frame(Timestamp, Class)