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

在含其他非位置值的数据框中合并重叠起止区间

汇总BLAST结果:合并Query的重叠/包含区间并重新计算覆盖度

我正在处理BLAST比对结果,目的是统计contig(作为Query)相对于数据库中Subject序列的完整覆盖度。目前我有一个包含核心BLAST输出字段的数据框,关键字段包括:

  • qlen:Query序列的总长度
  • length:当前比对结果中Query与Subject的匹配长度
  • qstart:Query上的比对起始位置
  • qend:Query上的比对终止位置
  • qcovhsp:该条比对结果覆盖Query的百分比

可复现示例

df = data.frame(qlen=c(100, 100, 100, 100, 100), 
                length=c(10, 10, 15, 30, 10), 
                qstart=c(1, 25, 30, 50, 70), 
                qend=c(10, 34, 44, 79, 79), 
                qcovhsp=c(10, 10, 15, 30, 10))

对应的数据表如下:

qlenlengthqstartqendqcovhsp
1001011010
10010253410
10015304415
10030507930
10010707910

期望的处理效果

我需要对上述数据进行区间合并处理,规则如下:

  • 若一个区间完全包含另一个区间,直接将被包含的区间并入包含区间(例如示例中第4行的区间包含第5行,直接吸收)
  • 若两个区间存在重叠部分,将它们合并为一个连续的区间(例如示例中第2行和第3行区间重叠,合并为一个区间)
  • 合并后需要重新计算length(合并后区间的实际长度)和qcovhsp(该区间占Query总长度的百分比)

处理后的目标数据表如下:

qlenlengthqstartqendqcovhsp
1001011010
10020254420
10030507930

后续分析逻辑

我已经编写了后续脚本,用于计算Query的总覆盖度(本例中总覆盖度为60%),后续会筛选保留总覆盖度超过70%的contig与Subject的组合。我的整体业务需求是:将组装得到的完整序列与质粒数据库进行BLAST比对,筛选出一致性≥98%(该过滤步骤已完成)且总覆盖度≥70%的contig。

遇到的问题

我在Stack Overflow上搜索过相关解决方案,但没有找到完全匹配我需求的内容。虽然看到过一篇关于合并重叠区间的文章,但不确定如何将其扩展应用到包含多列附加字段的数据框上。另外,我提问经验较少,也希望得到关于提问方式的改进建议。


内容的提问来源于stack exchange,提问作者David Bradshaw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:55:05