I have a data.frame1 like:
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
I also have a data.frame2 like:
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
Basically I have ranges of values from chromStart
to chromEnd
in data.frame1. I want to cut those ranges down to only ranges that overlap with my ranges in data.frame2
. For example, the first range of df1
is 2912322 to 29454711. I would like to cut that range down to 2912322 to 29400000 because that is the only range that overlaps with a range from df2
. Does anyone know how I could do this?
The output I want is a data.frame like:
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
Here is what the current output gives me for a 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