合并bed文件中的区域

数据分析中会经常用到bed文件,有时候bed文件中的区域有重叠时会影响统计结果,或者没有按照顺序排序时会影响代码的逻辑。合并bed文件或者文件中的区域是经常进行的。

我常用的工具是bedtools的merge功能,官方示例如下:

$ cat A.bed
chr1  100  200
chr1  180  250
chr1  250  500
chr1  501  1000

$ bedtools merge -i A.bed
chr1  100  500
chr1  501  1000

bedtools的merge功能强大的地方,更在于在合并的时候,可以进行一下操作。如下操作,通过-c指定要操作的目标列,-o指定操作动作。

$ cat A.bed
chr1  100  200   a1  1 +
chr1  180  250   a2  2 +
chr1  250  500   a3  3 -
chr1  501  1000  a4  4 +

$ bedtools merge -i A.bed -S +
# 合并正链的区域feature或者interval
chr1  100 250
chr1  501 1000

$  bedtools merge -i A.bed -c 5,5,5,6 -o mean,min,max,collapse
# 计算重叠区域第五列的平均值、最小值、最大值
# 将重叠区域的第六列按顺序列出
chr1  100 500 2 1 3 +,+,-
chr1  501 1000  4 4 4 +

我个人写的bash脚本如下:

#! /bin/bash

# 1)合并所有传入脚本中的bed文件,并生成一个中间文件
cat $@ | sort -k1,1 -k2,2n > bedtools.in.sorted.bed
# 2)合并中间文件,并输出到标准输出流中,供下一步处理
bedtools merge -i bedtools.in.sorted.bed
# 3)删除中间文件
rm bedtools.in.sorted.bed

参考:
http://bedtools.readthedocs.io/en/latest/content/tools/merge.html

#####################################################################
#版权所有 转载请告知 版权归作者所有 如有侵权 一经发现 必将追究其法律责任
#Author: Jason
#####################################################################

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.