С разбивкой по минутам от определенной суммы временного интервала в R
Мне нужно проводить часовую агрегацию моих данных, но сначала я хочу разделить их на минуты. Мои данные выглядят так:
# Data set:
dd <- read.table(header=TRUE, sep=",", text="
time, counts, counts_sec
2016-07-29 13:24:00, 10, 38
2016-07-29 13:44:00, 254, 1200
2016-07-29 14:04:00, 287, 1200
2016-07-29 14:24:00, 301, 1200")
dd$time <- as.POSIXct(dd$time)
Подсчеты представляют собой совокупную сумму отсчетов (10 отсчетов за 38 секунд). Обычно период измерения составлял 20 минут (1200 секунд). Теперь я хочу, чтобы значения по минутам и в качестве следующего шага агрегировали эти значения в почасовую сумму.
Кто-нибудь может мне помочь с этим?
1 ответ
Я не думаю, что можно вернуться к минутному уровню, если у вас есть 20-минутная точка зрения, потому что вы точно не знаете, что происходило в течение каждой минуты.
Тем не менее, вы можете получить часовую точку зрения. У меня есть еще несколько замечаний, чтобы прояснить, как работает этот процесс.
library(dplyr)
library(lubridate)
dd <- read.table(header=TRUE, sep=",", text="
time, counts, counts_sec
2016-07-29 13:24:00, 10, 38
2016-07-29 13:44:00, 254, 1200
2016-07-29 14:04:00, 287, 1200
2016-07-29 14:24:00, 301, 1200
2016-07-29 14:44:00, 254, 1200
2016-07-29 15:04:00, 287, 1200
2016-07-29 15:24:00, 301, 1200")
dd$time <- as.POSIXct(dd$time)
dd
# time counts counts_sec
# 1 2016-07-29 13:24:00 10 38
# 2 2016-07-29 13:44:00 254 1200
# 3 2016-07-29 14:04:00 287 1200
# 4 2016-07-29 14:24:00 301 1200
# 5 2016-07-29 14:44:00 254 1200
# 6 2016-07-29 15:04:00 287 1200
# 7 2016-07-29 15:24:00 301 1200
dd %>%
mutate(hour_range = 1+floor(as.numeric(difftime(time, min(time), units="hours")))) %>% # calculate in which hour range you are based on the start time point
group_by(hour_range) %>% # for each hour range
summarise(start = min(time), # get the start time point
sum_counts = sum(counts)) # get the sume of counts
# # A tibble: 3 × 3
# hour_range start sum_counts
# <dbl> <dttm> <int>
# 1 1 2016-07-29 13:24:00 551
# 2 2 2016-07-29 14:24:00 842
# 3 3 2016-07-29 15:24:00 301