我有一个事件表和一组时间间隔,我想为每个事件关联一个布尔值,即设置为T表示事件在时间间隔内。
我的输入:
intervals:
begin end
2015-03-01 14:02:00 2015-03-01 14:09:00
2015-03-01 15:13:00 2015-03-01 15:54:00
2015-03-01 16:02:00 2015-03-01 19:09:00
events:
id date
1 2015-03-01 14:01:00
2 2015-03-01 14:03:00
3 2015-03-01 14:07:00
4 2015-03-01 15:55:00
5 2015-03-01 17:02:00
我的输出将是:
id inInterval
1 F
2 T
3 T
4 F
5 T
我有数百万个事件和数万个间隔,出于性能原因,我不想在事件上循环,也不想处理每个间隔的所有事件。
我可以很容易地做的是得到有序的数据。事件和间隔开始/结束表:
events:
id date start end
1 2015-03-01 14:01:00
NA 2015-03-01 14:02:00 T
2 2015-03-01 14:03:00
3 2015-03-01 14:07:00
NA 2015-03-01 14:09:00 T
NA 2015-03-01 15:13:00 T
NA 2015-03-01 15:54:00 T
4 2015-03-01 15:55:00
NA 2015-03-01 16:02:00 T
5 2015-03-01 17:02:00
NA 2015-03-01 19:09:00 T
现在我被最后一部分卡住了:为start=T和end=T之间的所有行设置inInterval=T。这显然需要某种延迟,但我缺少所需的特性。
任何帮助都将不胜感激。谢谢
编辑:这个现有问题似乎提供了一些见解:What is an efficient method for partitioning and aggregating intervals from timestamped rows in a data frame?这是我发表问题时建议的,基本上findInterval应该能帮我解决问题。
2条答案
按热度按时间xt0899hw1#
我的新想法是以R为基的(假设区间表是有序的,并且没有重叠的区间):
给出:
findInterval
返回找到的区间中的索引:8fsztsew2#
对于ivs和
iv_between()
: