【发布时间】:2017-04-28 20:11:52
【问题描述】:
可能很容易,但很难解决,在网上寻找答案,但它们通常与 cut 和快照有关,而不是间隔重叠
require(data.table)
x = data.table(start=c("2017-04-18 18:05:00","2017-04-18 18:00:00",
"2017-04-18 21:05:00", "2017-04-18 16:05:00"),
end=c("2017-04-18 19:05:00","2017-04-18 21:30:00",
"2017-04-18 22:00:00", "2017-04-18 16:10:00"))
我们有 4 个观察值,我需要将其分配到相应的每小时窗口。
start end
1: 2017-04-18 18:05:00 2017-04-18 19:05:00
2: 2017-04-18 18:00:00 2017-04-18 21:30:00
3: 2017-04-18 21:05:00 2017-04-18 22:00:00
4: 2017-04-18 16:05:00 2017-04-18 16:10:00
例如,第一个在 18:00 时段有 55 分钟,在 19:00 时段有 5 分钟,下一个在 18:00、19:00、20:00 和 21:00 有 60 分钟,第三个在 21:00 有 55 分钟,最后一个在 16:00 有 5 分钟
结果应该如下(对不起,如果我把基本的手动添加错了;)
interval Q
1: 2017-04-18 16:00:00 5
2: 2017-04-18 17:00:00 0
3: 2017-04-18 18:00:00 115
4: 2017-04-18 19:00:00 65
5: 2017-04-18 20:00:00 120
6: 2017-04-18 21:00:00 85
当然,有一种直接的方法可以按分钟切割系列并按切割/间隔执行计数,但我相信这个问题非常普遍,它必须有一个直接的方法。最好我也有 0 值窗口,但如果需要,我可以对它们进行排序
【问题讨论】:
-
您是如何获得
Q中的值的? -
q 是属于某个区间的分钟数,例如案例 4 有 5 分钟 (2017-04-18 16:05:00 - 2017-04-18 16:10 :00) 和所有其他情况都没有,所以结果是 5