【发布时间】:2016-02-14 05:16:32
【问题描述】:
这几乎是我之前提出的问题的扩展,但我遇到了一个尚未找到解决方案的新问题。
这里是原问答:Find matching intervals in data frame by range of two column values
(这发现了同一数据框中不同名称之间常见的重叠间隔)
我现在想找到一种方法来排除 DF1 中的行,当新数据帧 DF2 存在重叠间隔时。
使用相同的DF1:
Name Event Order Sequence start_event end_event duration Group
JOHN 1 A 0 19 19 ID1
JOHN 2 A 60 112 52 ID1
JOHN 3 A 392 429 37 ID1
JOHN 4 B 282 329 47 ID1
JOHN 5 C 147 226 79 ID1
JOHN 6 C 566 611 45 ID1
ADAM 1 A 19 75 56 ID1
ADAM 2 A 384 407 23 ID1
ADAM 3 B 0 79 79 ID1
ADAM 4 B 505 586 81 ID1
ADAM 5 C 140 205 65 ID1
ADAM 6 C 522 599 77 ID1
对于 18 个不同的名称和两个 ID 组,这将继续。
现在有第二个数据帧,我希望从上述数据帧中排除间隔。
以下是 DF2 的示例:
Name Event Order Sequence start_event end_event duration Group
GAP1 1 A 55 121 66 ID1
GAP2 2 A 394 419 25 ID1
GAP3 3 C 502 635 133 ID1
IE,我希望找到 DF1 中每个“名称”的任何间隔,即在同一个“序列”中,并且在 DF2 中找到的间隔的任何点都有重叠时间(任何部分,无论它是否在开始事件,或中途开始并在结束事件之后结束)。我想遍历 DF1 中每个不同的“名称”。另外,序列很重要,所以我只想返回序列 A 和序列 A 之间共有的结果,然后是序列 B 和序列 B,最后是序列 C 和序列 C。
期望的结果(只显示名字):
Name Event Order Sequence start_event end_event duration Group
JOHN 1 A 0 19 19 ID1
JOHN 4 B 282 329 47 ID1
JOHN 5 C 147 226 79 ID1
ADAM 3 B 0 79 79 ID1
ADAM 4 B 505 586 81 ID1
ADAM 5 C 140 205 65 ID1
上次答案部分是通过 foverlaps 解决的,但我仍然不太熟悉能够解决这个问题 - 假设这是回答这个问题的最佳方法。
谢谢!
【问题讨论】:
-
您的描述和期望的输出相互矛盾。如果间隙的顺序无关紧要,那么@jenesaisquoi 的答案是正确的。如果间隙的顺序确实很重要(正如我从您的描述中了解到的那样),那么输出还包括带有
Sequence == B的行,用于 ADAM。这导致 6 行的最终结果。 -
这是一个只考虑一个名称的所需结果的快速示例 - 实际数据框要大得多,但我不想写出整个结果。
标签: r data.table