我想使用foverlaps查找两个床文件的交叉范围,并将包含重叠范围的任何行折叠成一行.在下面的例子中,我有两个基因组范围表.这些表被称为"床"文件,其具有从零开始的坐标和染色体中特征的基于一个的结束位置.例如,START = 9,STOP = 20被解释为跨越10到20的基数,包括10和20.这些床文件可以包含数百万行.无论提供两个要交叉的文件的顺序如何,解决方案都需要提供相同的结果.
第一张表
> table1
CHROMOSOME START STOP
1: 1 1 10
2: 1 20 50
3: 1 70 130
4: X 1 20
5: Y 5 200
Run Code Online (Sandbox Code Playgroud)
第二张表
> table2
CHROMOSOME START STOP
1: 1 5 12
2: 1 15 55
3: 1 60 65
4: 1 100 110
5: 1 130 131
6: X 60 80
7: Y 1 15
8: Y 10 50
Run Code Online (Sandbox Code Playgroud)
我认为新的foverlaps函数可以是一种非常快速的方法来查找这两个表中的交叉范围,以生成一个表格,如下所示:
结果表:
> resultTable
CHROMOSOME START STOP
1: 1 5 10 …Run Code Online (Sandbox Code Playgroud) 可怕的标题问题,但这是我想要解决的问题。对于表1,我想添加“ BETWEEN”列,以验证表2中相应“ BIN”的“ POSITION”是否介于“ START”和“ STOP”值之间。
表1。BIN名称(字符)和BIN(数字)中的POSITION:
BIN POSITION
1 12
1 52
1 86
7 6
7 22
X 112
X 139
MT 3
MT 26
Run Code Online (Sandbox Code Playgroud)
表2:BIN名称(字符)以及START和STOP位置(数字)
BIN START STOP
1 2 64
1 90 110
7 20 100
7 105 200
X 1 5
MT 1 1000
Run Code Online (Sandbox Code Playgroud)
和预期的结果-表1与“ BETWEEN”:
CHROM POSITION BETWEEN
1 12 TRUE
1 52 TRUE
1 86 FALSE
7 6 FALSE
7 22 TRUE
X 112 FALSE
X 139 FALSE
MT 3 TRUE …Run Code Online (Sandbox Code Playgroud)