【发布时间】:2016-10-04 02:25:11
【问题描述】:
我有一个 data.frame1 像:
1 bin chrom chromStart chromEnd name score
2 12 chr1 29123222 29454711 -5.7648 599
3 116 chr1 45799118 45986770 -4.8403 473
4 117 chr1 46327104 46490961 -5.3036 536
5 121 chr1 50780759 51008404 -4.4165 415
6 133 chr1 63634657 63864734 -4.8096 469
7 147 chr1 77825305 78062178 -5.4671 559
我也有一个 data.frame2 之类的:
chrom chromStart chromEnd N
1 chr1 63600000 63700000 1566
2 chr1 45800000 45900000 1566
3 chr1 29100000 29400000 1566
4 chr1 50400000 50500000 1566
5 chr1 46500000 46600000 1566
基本上,我在 data.frame1 中有从 chromStart 到 chromEnd 的值范围。我想将这些范围缩小到仅与data.frame2 中的范围重叠的范围。例如,df1 的第一个范围是 2912322 到 29454711。我想将该范围缩减到 2912322 到 29400000,因为这是唯一与 df2 的范围重叠的范围。有谁知道我该怎么做?
我想要的输出是一个data.frame,比如:
1 bin chrom chromStart chromEnd name score
2 12 chr1 29123222 29400000 -5.7648 599
3 116 chr1 45800000 45900000 -4.8403 473
6 133 chr1 63634657 63700000 -4.8096 469
这是当前输出为我提供的 data.frame 的内容:
chrom chromStart chromEnd bin name score
1 chr1 29123222 29130000 12 -5.7648 599
2 chr1 29123222 29140000 12 -5.7648 599
3 chr1 29123222 29150000 12 -5.7648 599
4 chr1 29123222 29160000 12 -5.7648 599
5 chr1 29123222 29170000 12 -5.7648 599
【问题讨论】:
-
如果 data.frame1 行是 1 到 9 并且范围 1 到 3 和 6 到 7 在 data.frame2 中会有什么行为?
-
那么我希望保留范围 1 到 3 和范围 6 到 7。也许最好削减data.frame2?
-
您可以将data.frame2中重叠的任何间隔合并到一个间隔中。然后通过此时的起点对您得到的区间列表进行排序,检查交点应该更容易。
-
怎么做?
-
你可以试试
data.table::foverlaps或IRanges::findOverlaps。