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

合并重叠索引

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

    我有一份数据。具有开始和结束索引(已排序)的帧,例如:

    df <- data.frame(start.idx = c(1,2,5),
                     end.idx = c(2,3,6))
    

    我正在寻找一个可以合并行的函数 i i-1 如果 start.idx[i] == end.idx[i-1] ,这样新行的 start.idx start.idx[i-1] end.idx end.idx[i] .

    对于上面的示例,将生成新(合并)数据。框架将是:

    res.df <- data.frame(start.idx = c(1,5),
                         end.idx = c(3,6))
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Ronak Shah    4 年前

    如果存在重叠,可以创建包含同一组中的行的组,然后选择 first last 分别用于开始和结束的值。

    library(dplyr)
    
    df %>%
      arrange(start.idx) %>%
      group_by(group = cumsum(start.idx > lag(end.idx, default = 0))) %>%
      summarise(start.idx = first(start.idx), 
                end.idx = last(end.idx)) %>%
      select(-group)
    
    
    #  start.idx end.idx
    #      <dbl>   <dbl>
    #1         1       3
    #2         5       6