首页 > 解决方案 > 从开始到结束查找最接近的非重叠范围

问题描述

我想找到从第一个开始到最后一个结束位置不重叠的最近范围。知道如何进行吗?在下面的示例中,应过滤掉 c(8, 33) 和 c(155, 161),因为它们与前面的范围重叠。

#Example data
df <- data.frame(
  start = c(7,8,14,34,67,92,125,155,170,200),
  end = c(13,33,25,66,91,124,155,161,181,214)
)

   start end
1      7  13
2      8  33
3     14  25
4     34  66
5     67  91
6     92 124
7    125 155
8    155 161
9    170 181
10   200 214

#Overlapping rows
  start end
1     8  33
2   155 161

#Desired output where overlapping rows are filtered away
  start end
1     7  13
2    14  25
3    34  66
4    67  91
5    92 124
6   125 155
7   170 181
8   200 214

标签: rdplyriranges

解决方案


我会将其作为一个简单的循环来执行,因为是否排除一行取决于前一行的计算结果

i <- 2

while(i < nrow(df)) {
  if(df$start[i] <= df$end[i - 1]) {
    df <- df[-i,] 
  } else { 
    i <- i + 1
  }
}

df
#>    start end
#> 1      7  13
#> 3     14  25
#> 4     34  66
#> 5     67  91
#> 6     92 124
#> 7    125 155
#> 9    170 181
#> 10   200 214

推荐阅读