You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中按条件提取同组同类的最小start与最大end值

R语言合并分组下重叠区间的实现方法

你需要的是经典的分组重叠区间合并功能,由于你的数据已经提前按group、class、start排序,实现起来非常简单,这里给你常用的dplyr实现方案:

前置处理

首先需要将字符类型的start和end列转为数值型,避免字符比较出现逻辑错误:

df$start <- as.numeric(df$start)
df$end <- as.numeric(df$end)

核心实现代码

library(dplyr)

result <- df %>%
  # 按group和class分组,不同分组的区间互不干扰
  group_by(group, class) %>%
  # 生成段标识:当前start大于之前所有行的最大end时,判定为新的段
  mutate(segment = cumsum(start > lag(cummax(end), default = 0))) %>%
  # 按group、class、段标识二次分组
  group_by(group, class, segment) %>%
  # 汇总每个段的最小start和最大end
  summarise(
    start = min(start),
    end = max(end),
    .groups = "drop"
  ) %>%
  # 移除不需要的段标识列
  select(-segment)

输出结果验证

打印result即可得到你需要的输出:

# A tibble: 4 × 4
  group class start      end     
  <chr> <chr> <dbl>    <dbl>
1 1     2     23477018 47909872
2 1     2     48339885 53818713
3 1     3     87274    5329014
4 1     3     6733569  13934484

该方案处理数千行数据性能足够,逻辑完全匹配你描述的规则。

内容的提问来源于stack exchange,提问作者L R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:45:11