2017-02-01 13 views
0

Мне нужно выполнить ежечасную агрегацию данных, но сначала хочу разбить ее на минуты. Мои данные выглядит следующим образом:Дезагрегировать в минутах от определенного промежутка времени в 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) 

Графы представляют собой совокупную сумму counts_sec (10 отсчитывает в 38 секунд). Обычно период измерения составлял 20 минут (1200 секунд). Я хочу теперь минутные значения, и в качестве следующего шага суммируем эти значения с почасовой суммой.

Любой может мне помочь?

+0

Вы хотите получить минимальные значения как [24,44,04,24 ...]? – OmaymaS

+0

Пакет 'xts' и, например, его функция' to.period' могут быть полезны для таких задач. Обратите внимание, что «невозможно преобразовать серию из более низкой периодичности в более высокую периодичность - например, еженедельно до ежедневного или ежедневного до 5-минутных баров, так как это потребует магии». (от '? to.period'). Попробуйте 'dd_xts <- xts (dd $ counts, order.by = dd $ time)'; 'dd_xts <- to.hourly (dd_xts) [, 4]' – thie1e

ответ

0

Я не думаю, что можно вернуться на минутный уровень, когда у вас есть точка зрения 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