Я работаю с фреймом данных, включающим столбцы 'timestamp' и 'amount'. Данные могут быть получены так:
sample_size <- 40
start_date = as.POSIXct("2020-01-01 00:00")
end_date = as.POSIXct("2020-01-03 00:00")
timestamps <- as.POSIXct(sample(seq(start_date, end_date, by=60), sample_size))
amount <- rpois(sample_size, 5)
df <- data.frame(timestamps=timestamps, amount=amount)
Теперь я хотел бы построить сумму записей amount
для некоторого периода (например, каждый час, 30 min
, 20 min
). Окончательный график будет выглядеть как гистограмма временных меток, но он должен не просто считать , сколько временных меток попало в таймфрейм, но и в том, какая сумма попала в таймфрейм.
Как я могу подойти к этому? Я мог бы создать дополнительный вектор с количеством каждого таймфрейма, но не знаю, как поступить.
Также я хотел бы добавить функцию, чтобы уменьшить на час. Так, что отображается только один день (обратите внимание, что диапазон между start_date
и end_date
равен двум дням), и на каждом таймфрейме (скажем, каждый час) наносится объем данных, находящихся в этом часе. В этом случае данные
2020-01-01 13:03:00 5
2020-01-02 13:21:00 10
2020-01-02 13:38:00 1
2020-01-01 13:14:00 3
дадут планку высоты sum(5, 10, 1, 3) = 19
на таймфрейме 13:00-14:00
. Как я могу реализовать построение графиков, чтобы легко переключаться между этими двумя режимами (построение дней / график всего за один день и сокращение)?
РЕДАКТИРОВАТЬ: Следуя совету @Gregor Thomas, я добавил группировку столбец, подобный следующему:
df$time_group <- lubridate::floor_date(df$timestamps, unit="20 minutes")
Теперь мне интересно, как игнорировать даты и, таким образом, уменьшить их на 20 минут (независимо от даты).