我有两个文件,其中包含一些我想要重叠的范围,并根据完全匹配和部分匹配检索结果。举个例子就清楚了。
文件A:
chr1 200 400 E1
chr1 400 600 E2
chr1 600 800 E3
chr2 200 300 E4
文件B:
chr1 100 250 TF1 G1
chr1 250 650 TF2 G2
chr1 450 850 TF3 G3
输出:
chr1 100 250 TF1 G1 chr1 200 400 E1
chr1 250 650 TF2 G2 chr1 200 400 E1
chr1 250 650 TF2 G2 chr1 400 600 E2
chr1 250 650 TF2 G2 chr1 600 800 E3
chr1 450 850 TF3 G3 chr1 400 600 E2
chr1 450 850 TF3 G3 chr1 600 800 E3
在这一步之前,我可以做一些事情,但下一步是我需要你的帮助。
在这里,我想首先对这些行进行子集化
- 仅具有 1 个匹配项(例如输出文件的第 1 行,与重叠大小无关)
- 如果有两个匹配项(例如输出的第 5 行和第 6 行),则重叠最多的“中心行”(将是第 6 行,因为重叠为 200,而第 5 行的重叠为 150)
- 如果有 3 个或超过 3 个匹配项(例如,输出的第 3 行完全重叠,但第 2 行和第 4 行是具有部分重叠的相邻行,分别为 150 和 50),那么我只想返回中心行,这将在这种情况下是第 3 行。
稍后,我想检索第一个邻居,然后是第二个邻居,依此类推,因为在实际数据集中,可能会发生文件 B 中的一个 bin 与文件 A 中最多 5 或 7 个 bin 重叠的情况。
所以,基本上我想要的是首先得到所有的中心重叠,然后是中心+第一个邻居,然后是中心+第二个邻居,依此类推。
按照这个原理,我的第一个结果将是:
结果1(中心重叠):
chr1 100 250 TF1 G1 chr1 200 400 E1
chr1 250 650 TF2 G2 chr1 400 600 E2
chr1 450 850 TF3 G3 chr1 600 800 E3
结果2(中心+第一个邻居):
chr1 100 250 TF1 G1 chr1 200 400 E1
chr1 250 650 TF2 G2 chr1 200 400 E1
chr1 250 650 TF2 G2 chr1 400 600 E2
chr1 250 650 TF2 G2 chr1 600 800 E3
chr1 450 850 TF3 G3 chr1 400 600 E2
chr1 450 850 TF3 G3 chr1 600 800 E3
如果可能的话,我想单独检索相邻行而不是中心行。
任何帮助都感激不尽。谢谢你。