【发布时间】:2021-01-27 15:49:54
【问题描述】:
我有一个数据框,其中行包含范围。我想确定范围组,其中每个范围与组中至少一个其他行重叠超过 75%。分组应作为索引变量添加到原始数据中。
示例数据如下:
df <- data.frame(label = c("A", "B", "C", "D", "E", "F"),
start = c(16, 18, 37, 62, 15, 45),
stop = c(22, 24, 55, 66, 23, 55))
生成的 df 应如下所示:
label start stop ID
"A" 6 22 1
"B" 6 24 1
"C" 37 55 2
"D" 62 66 3
"E" 15 23 1
"F" 45 55 2
首先我尝试了dplyr 选项与mutate 和lag,但随后分组取决于行的顺序并且不适用于所有情况。接下来我尝试使用seq_along 进行for 循环,但我无法解决问题。希望你们中的一个可以...
【问题讨论】:
-
您对 75% 的比较是有方向的。例如,考虑范围 1-4 和 2-9。第一个与第二个共享其范围的 75%,但第二个没有回报。查看您的数据,
"E"(15-23) 与"A"重叠 7/8 或 87.5%,但"A"与"E"重叠仅 7/16 或 43.75%。 -
没错,我想使用最高百分比作为分组标准。在这种情况下,与另一个范围重叠 >75% 的范围将最终在同一组中。所以在
A和E的例子中,它们应该被组合在一起。