代码之家  ›  专栏  ›  技术社区  ›  dan

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

  •  0
  • dan  · 技术社区  · 3 年前

    我有一个 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
    

    df 按排序 start end . 第一个间隔标记为属于 group g1 从这里开始,任何间隔被其前面的间隔隔开一段距离(定义为 开始 当前间隔减去 终止 等于或小于 inter.interval.distance.cutoff 已分配给 否则它将启动一个新组( 索引增加1,这是ew获取新 标签)。

    以下是我想要的结果:

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

    有什么快速的方法吗?

    1 回复  |  直到 3 年前
        1
  •  1
  •   Onyambu    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