С разбивкой по минутам от определенной суммы временного интервала в 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
Другие вопросы по тегам