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

如何基于重叠关系对区间进行分组标记?(R语言场景)

R语言用ivs包实现区间重叠分组字母标记

1. 安装加载ivs包

ivs是R中专门处理区间数据的高效工具包,先安装并加载:

install.packages("ivs")
library(ivs)

2. 导入并预处理数据

把你提供的数据集转换成ivs要求的区间格式:

# 加载你的区间数据
df <- structure(list(Interval = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Start = c(5.3, 
6.5, 7.6, 7.8, 8, 8.3, 8.5, 8.7, 8.8, 9.9), End = c(7.5, 8.7, 
9.8, 10, 10.2, 10.5, 10.7, 10.9, 11, 12.1)), row.names = c(NA, 
-10L), spec = structure(list(cols = list(Interval = structure(list(), class = c("collector_double", 
"collector")), Start = structure(list(), class = c("collector_double", 
"collector")), End = structure(list(), class = c("collector_double", 
"collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), delim = "\t"), class = "col_spec"), class = c("spec_tbl_df","tbl_df", "tbl", "data.frame"))

# 创建iv类型的区间列
df$interval <- iv(df$Start, df$End)

3. 实现分组标记

根据你的规则,我们需要:

  • 对相互重叠(含间接重叠)的区间分配同一基础分组
  • 对同时与多组重叠的区间,合并相关分组的字母
# 第一步:用iv_group_overlaps获取连通分组(间接重叠的区间归为同一组)
df$group_id <- iv_group_overlaps(df$interval)

# 第二步:为每个分组分配字母(A、B、C...)
group_map <- setNames(LETTERS[sort(unique(df$group_id))], sort(unique(df$group_id)))
df$group_letter <- group_map[as.character(df$group_id)]

# 第三步:处理跨组情况——找出每个区间直接重叠的所有分组,合并字母
df$final_groups <- sapply(seq_len(nrow(df)), function(i) {
  # 找出当前区间所有直接重叠的区间
  overlaps <- iv_overlaps(df$interval, df$interval[i])
  # 获取这些重叠区间的所有唯一分组字母
  unique_letters <- unique(df$group_letter[overlaps])
  # 排序后合并为字符串
  paste(sort(unique_letters), collapse = ", ")
})

4. 查看结果

运行后,查看最终的分组标记结果:

select(df, Interval, Start, End, final_groups)

结果解释

  • 无任何重叠的区间,final_groups为单个字母(独立分组)
  • 直接/间接重叠的区间,共享至少一个字母分组
  • 同时与多个独立分组区间重叠的区间,会显示多个字母(比如同时重叠A组和B组的区间,标记为"A, B")

内容的提问来源于stack exchange,提问作者Eduardo A. Sánches Torres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:25:02