繁体   English   中英

如何与 python/pandas 交叉和合并文件以根据原始输入文件将重叠划分为子区域?

[英]How to intersect and merge files with python/pandas to divide overlap into subregions based on original input file?

我有一些来自不同公司的提供外显子组测序试剂盒的.bed 文件。

我想要一个总结所有这些套件的所有目标区域的文件。 .bed 文件具有由三列(chr#、Start、End)组成的基本结构。

我想获得一张 output 表,该表显示哪些基因组区域仅由这些套件之一覆盖,哪些区域被多个(以及哪些)覆盖。 说明这一点的最好方法是通过一个例子:

床文件 1

字符# 开始 结尾
1 100 300

床文件 2

字符# 开始 结尾
1 150 350

床文件 3

字符# 开始 结尾
1 80 200

从这些文件中,我创建了一个包含所有目标区域的 dataframe,并按chr#Start坐标对其进行排序。 这是生成的 dataframe 的样子:

概述数据框

我想合并和交叉 output 的文件,该文件根据输入文件之间的重叠将区域划分为子区域。 它应该看起来像这样:

字符# 开始 结尾 套件 1 套件 2 套件 3
1 80 100 0 0 1
1 100 150 1 0 1
1 150 200 1 1 1
1 200 300 1 1 0
1 300 350 0 1 0

我知道 Bioconductor 的 Granges 上可能有这样的 function,但我不熟悉该库及其功能。

任何帮助,将不胜感激。

更新

bedtools使用multiIntersectBed

$ multiIntersectBed -i *.bed
1   80  100 1   3       0   0   1
1   100 150 2   1,3     1   0   1
1   150 200 3   1,2,3   1   1   1
1   200 300 2   1,2     1   1   0
1   300 350 1   2       0   1   0

还有一个 Python 接口:

http://daler.github.io/pybedtools/

>>> import pybedtools as bt
>>> from   glob       import glob
>>> print(bt.BedTool().multi_intersect(i=glob('*.bed')))
1   80  100 1   3       0   0   1
1   100 150 2   1,3     1   0   1
1   150 200 3   1,2,3   1   1   1
1   200 300 2   1,2     1   1   0
1   300 350 1   2       0   1   0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM