按距离截止对线性间隔进行分组

Grouping linear intervals by distance cutoff

我有一个 R data.frame 的线性间隔:

df <- data.frame(id = paste0("i",1:15),
                 start = c(6575,7156,7949,45835,46347,47168,126804,127276,128127,157597,158074,158902,199129,199704,200507),
                 end = c(6928,7392,8260,46104,46610,47485,127079,127542,128417,157872,158340,159219,199374,199951,200938))

我也有一个区间距离截止值:

inter.interval.distance.cutoff <- 3243

dfstartend 排序。第一个区间被标记为属于 group g1 并且从那里开始任何被它之前的区间隔开一段距离的区间(定义为当前区间的 start 减去等于或小于 inter.interval.distance.cutoffend 之前的间隔的 end 被分配给它之前的间隔的 group ,否则它开始一个新组( group index 递增 1,这就是 ew 如何获得新的 group 标签)。

这是我想要的结果:

df$group <- c(rep("g1",3), rep("g2",3), rep("g3",3), rep("g4",3), rep("g5",3))

有什么快速的方法吗?

df$group <- paste0('g', cumsum(c(1, diff(df$start)>inter.interval.distance.cutoff)))

    id  start    end  f
1   i1   6575   6928 g1
2   i2   7156   7392 g1
3   i3   7949   8260 g1
4   i4  45835  46104 g2
5   i5  46347  46610 g2
6   i6  47168  47485 g2
7   i7 126804 127079 g3
8   i8 127276 127542 g3
9   i9 128127 128417 g3
10 i10 157597 157872 g4
11 i11 158074 158340 g4
12 i12 158902 159219 g4
13 i13 199129 199374 g5
14 i14 199704 199951 g5
15 i15 200507 200938 g5