Как можно получить сводную таблицу / график во фрейме данных временной последовательности?

#r

#r

Вопрос:

У меня есть фрейм данных, который содержит временную последовательность, например:

 example <- data.frame(
Date=seq(
 from=as.POSIXct("2012-1-1 0:00", tz="UTC"),
 to=as.POSIXct("2012-1-31 23:00", tz="UTC"),
 by="10 min"),
 frequency=runif(4459, min=12, max=26))
  

Я хотел бы подсчитать минимальное значение, среднее, максимальное значение и т.д. (используя сводную таблицу) по дням: например, сводная таблица дней 2012 1. 1. (используя только первые 144 raw), 2012 1. 2. (используя raw от 145 до 288), 2012 1. 3. (используя raw от 289 до 432) и т.д.

как я могу получить эту таблицу? Я пробовал это

 summary(example$freqency, example$Date, by="day")
  

как я могу рисовать dropbox для каждого дня отдельно? Я пробовал это:

 boxplot(example$freqency, example$Date, by="day")
  

Как я могу выбрать временные данные в течение нескольких дней? Я также хочу рассчитать сводную таблицу по дням, но в этом случае я хочу использовать только данные за каждые часы (например 0:00, 1:00, 2:00 и т.д.)

Может кто-нибудь мне помочь?

Ответ №1:

Чтобы получить сводку frequency по дням, вы можете использовать aggregate from base R в сочетании с strftime() :

 aggregate(frequency ~ strftime(Date, "%d"),
          FUN = summary, data = example)
  

Чтобы получить блок-график в день, нам просто нужно создать $day столбец для x-axis входа ggplot2 .

 library(ggplot2)
example$day <- strftime(example$Date, "%d")
ggplot(example, aes(x = factor(day), y = frequency))   geom_boxplot()
  

введите описание изображения здесь

Ответ №2:

Попробуйте это просто:

в течение нескольких дней:

 example$str.date <- substring(as.character(example$Date),1,10)
summary.example <- aggregate(frequency~str.date, example, FUN = summary)
library(ggplot2)
ggplot(example, aes(str.date, frequency, group=str.date, fill=str.date))   geom_boxplot()    
  theme(axis.text.x = element_text(angle=90, vjust = 0.5))
  

введите описание изображения здесь

в течение нескольких часов (в течение каждого дня):

 example$str.date.hrs <- substring(as.character(example$Date),1,13)
summary.example <- aggregate(frequency~str.date.hrs, example, FUN = summary)
library(ggplot2)
ggplot(example[example$str.date=='2012-01-01',], aes(str.date.hrs, frequency, group=str.date.hrs, fill=str.date.hrs))   geom_boxplot()    
  theme(axis.text.x = element_text(angle=90, vjust = 0.5))
  

введите описание изображения здесь