【发布时间】:2018-02-28 06:20:09
【问题描述】:
我有一个包含停车票、开始/结束时间以及购买地点(组)信息的数据集。我需要执行时间序列分析,以预测未来何时何地购买门票。为此,我需要将格式转换为时间序列格式,其中包含在给定时间点有效的票数。
我的数据样本:
library(lubridate)
timeseries <- data.frame(start = c("2016-12-31 20:42:00",
"2016-12-31 21:41:00",
"2016-12-31 21:15:00",
"2016-12-31 17:19:00",
"2016-12-31 21:47:00",
"2016-12-31 16:58:00"),
end = c("2016-12-31 23:07:00",
"2016-12-31 23:07:00",
"2016-12-31 23:08:00",
"2016-12-31 23:09:00",
"2016-12-31 23:11:00",
"2016-12-31 23:11:00"),
group = c(1,2,1,2,1,2),
stringsAsFactors = FALSE)
timeseries$start <- as.POSIXlt(timeseries$start)
timeseries$end <- as.POSIXlt(timeseries$end)
timeseries$interval <- interval(timeseries$start, timeseries$end, tzone="UTC")
我想在(按组)中汇总信息的时间段示例:
summary_hours <- data.frame(timeStart = c("2016-12-31 16:00",
"2016-12-31 17:00",
"2016-12-31 18:00",
"2016-12-31 19:00",
"2016-12-31 20:00",
"2016-12-31 21:00",
"2016-12-31 22:00",
"2016-12-31 23:00"),
timeEnd = c("2016-12-31 17:00",
"2016-12-31 18:00",
"2016-12-31 19:00",
"2016-12-31 20:00",
"2016-12-31 21:00",
"2016-12-31 22:00",
"2016-12-31 23:00",
"2017-01-01 00:00"))
summary_hours$timeStart <- as.POSIXlt(summary_hours$timeStart)
summary_hours$timeEnd <- as.POSIXlt(summary_hours$timeEnd)
summary_hours$interval <- interval(summary_hours$timeStart, summary_hours$timeEnd, tzone="UTC")
当数据集跨越两年时,我目前的方法似乎非常低效。
library("lubridate")
intersect_in_mins <- function(interval) {
return(as.period(intersect(interval, summary_hours$interval), "minutes")@minute)
}
summary_hours$group1 <- rowSums(t(do.call(rbind, lapply(subset(timeseries, group == 1)$interval, intersect_in_mins))), na.rm = TRUE)
summary_hours$group2 <- rowSums(t(do.call(rbind, lapply(subset(timeseries, group == 2)$interval, intersect_in_mins))), na.rm = TRUE)
summary_hours
timeStart timeEnd interval group1 group2
1 2016-12-31 16:00:00 2016-12-31 17:00:00 2016-12-31 16:00:00 UTC--2016-12-31 17:00:00 UTC 0 2
2 2016-12-31 17:00:00 2016-12-31 18:00:00 2016-12-31 17:00:00 UTC--2016-12-31 18:00:00 UTC 0 101
3 2016-12-31 18:00:00 2016-12-31 19:00:00 2016-12-31 18:00:00 UTC--2016-12-31 19:00:00 UTC 0 120
4 2016-12-31 19:00:00 2016-12-31 20:00:00 2016-12-31 19:00:00 UTC--2016-12-31 20:00:00 UTC 0 120
5 2016-12-31 20:00:00 2016-12-31 21:00:00 2016-12-31 20:00:00 UTC--2016-12-31 21:00:00 UTC 18 120
6 2016-12-31 21:00:00 2016-12-31 22:00:00 2016-12-31 21:00:00 UTC--2016-12-31 22:00:00 UTC 118 139
7 2016-12-31 22:00:00 2016-12-31 23:00:00 2016-12-31 22:00:00 UTC--2016-12-31 23:00:00 UTC 180 180
8 2016-12-31 23:00:00 2017-01-01 00:00:00 2016-12-31 23:00:00 UTC--2017-01-01 00:00:00 UTC 26 27
你有什么好的图书馆可以自动完成这种魔法的建议吗?
【问题讨论】:
标签: r time-series grouping aggregate lubridate