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