Время агрегации минут в другом интервале времени в R - PullRequest
0 голосов
/ 13 сентября 2018

Здесь набор данных с минутами и временем.

times<-structure(list(date = structure(1:61, .Label = c("13.09.2018 14:00", 
"13.09.2018 14:01", "13.09.2018 14:02", "13.09.2018 14:03", "13.09.2018 14:04", 
"13.09.2018 14:05", "13.09.2018 14:06", "13.09.2018 14:07", "13.09.2018 14:08", 
"13.09.2018 14:09", "13.09.2018 14:10", "13.09.2018 14:11", "13.09.2018 14:12", 
"13.09.2018 14:13", "13.09.2018 14:14", "13.09.2018 14:15", "13.09.2018 14:16", 
"13.09.2018 14:17", "13.09.2018 14:18", "13.09.2018 14:19", "13.09.2018 14:20", 
"13.09.2018 14:21", "13.09.2018 14:22", "13.09.2018 14:23", "13.09.2018 14:24", 
"13.09.2018 14:25", "13.09.2018 14:26", "13.09.2018 14:27", "13.09.2018 14:28", 
"13.09.2018 14:29", "13.09.2018 14:30", "13.09.2018 14:31", "13.09.2018 14:32", 
"13.09.2018 14:33", "13.09.2018 14:34", "13.09.2018 14:35", "13.09.2018 14:36", 
"13.09.2018 14:37", "13.09.2018 14:38", "13.09.2018 14:39", "13.09.2018 14:40", 
"13.09.2018 14:41", "13.09.2018 14:42", "13.09.2018 14:43", "13.09.2018 14:44", 
"13.09.2018 14:45", "13.09.2018 14:46", "13.09.2018 14:47", "13.09.2018 14:48", 
"13.09.2018 14:49", "13.09.2018 14:50", "13.09.2018 14:51", "13.09.2018 14:52", 
"13.09.2018 14:53", "13.09.2018 14:54", "13.09.2018 14:55", "13.09.2018 14:56", 
"13.09.2018 14:57", "13.09.2018 14:58", "13.09.2018 14:59", "13.09.2018 15:00"
), class = "factor"), value = 1:61), .Names = c("date", "value"
), class = "data.frame", row.names = c(NA, -61L))

Мне нужно общее время в минутах в любых вариантах интервала (потому что я не знаю, с каким интервалом времени мне удобнее выполнять прогноз).

Как совокупно минутное время

1. by 15 minutes
2. by 30 minutes
3. by 45 minutes
4.by 1 hour
5. by day

Итак, 5 возможных выходов по сумме

15                 varsum
13.09.2018 14:15    136
13.09.2018 14:30    376
13.09.2018 14:45    616
13.09.2018 15:00    810

30  
13.09.2018 14:30    496
13.09.2018 15:00    1426

45  
13.09.2018 14:45    1081
13.09.2018 15:30    856


60  
13.09.2018 15:00    1891

day 1891

Это 5 отдельных наборов данных.

1 Ответ

0 голосов
/ 14 сентября 2018

Попробуйте что-то вроде этого:

library(lubridate)
times$date <- as.POSIXlt(as.character(times$date), format = "%d.%m.%Y %H:%M")
min_cuts <- c(15, 30, 45, 60)
f_cuts <- function(x) {
  minuts <- minutes(times$date)@minute/60
  tt <- as.factor(as.POSIXlt(minutes(x * floor(minuts/x)), origin = "1970-01-01"))
  return(tapply(times$value, tt, sum))
}

out <- sapply(min_cuts, f_cuts)
names(out) <- min_cuts
out
$`15`
2018-09-13 14:00:00 2018-09-13 14:15:00 2018-09-13 14:30:00 
                120                 345                 570
2018-09-13 14:45:00 2018-09-13 15:00:00 
                795                  61 

$`30`
2018-09-13 14:00:00 2018-09-13 14:30:00 2018-09-13 15:00:00 
                465                1365                  61 

$`45`
2018-09-13 13:45:00 2018-09-13 14:30:00 
                465                1426 

$`60`
2018-09-13 14:00:00 2018-09-13 15:00:00 
               1830                  61 
...