如何找到两个不同数据帧之间的重叠,然后将这些数据写入相应的 bin 中?
例如,我将有一个数据框(由此处的第一个表表示),其中包含一个子集的起点和终点,例如从 0 到 10.000 的数字序列,但这些子集没有提供有关其余 10.000 个数字的信息/不包含它们。
染色体 | 开始 | 结尾 | 长度 |
---|---|---|---|
ch1 | 151 | 250 | 100 |
ch1 | 301 | 410 | 110 |
ch1 | 461 | 500 | 40 |
ch+n | n | n | n |
另一个数据帧(由第二个表表示)由 100 个小数字组成——跨越整个序列的短间隔,从 0 到 10.000。
染色体 | 垃圾桶 | BinStart | BinEnd | 重叠数 |
---|---|---|---|---|
ch1 | 1 | 1 | 100 | |
ch1 | 2 | 101 | 201 | |
ch1 | 3 | 301 | 400 | |
ch1 | 4 | 401 | 500 | |
ch+n | n | n | n |
因此,不同的数据帧也有不同的行数,第一个只跨越 10.000 个数字的一部分,而第二个跨越全部。
我想过使用一个循环遍历每行的 BinStart 和 BinEnd,然后查看间隔是否在第一个数据帧的 Start 和 End 值之间,然后填充 Number of Overlaps 列,但不知道如何做到这一点。
也许我应该将我的垃圾箱分成仅跨越 1 个数字的垃圾箱,并检查这个数字是否介于两个值之间,然后如果是 = 填充数字 1,如果否 = 填充数字 0,然后再次将我的垃圾箱合并到垃圾箱中跨越100个数字?
最后的输出/结果应如下所示:
染色体 | 垃圾桶 | 开始 | 结尾 | 重叠数 |
---|---|---|---|---|
ch1 | 1 | 1 | 100 | 0 |
ch1 | 2 | 101 | 201 | 50 |
ch1 | 3 | 301 | 400 | 100 |
ch1 | 4 | 401 | 500 | 50 |
ch+n | n | n | n | n |
dplyr 或 findOverlaps 或 GenomicRanges 包的 mutate 函数在这里有用吗?
提前谢谢大家,周末愉快!