Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

comparing and finding overlap range in R

Tags:

r

overlap

I have two tables where each of them including range of numbers. one table is subdivision of the other. I want to create binary column in the first table which shows in which range they are overlapped.

for example:

df1:
start1   end1
 1       6
 6       8
 9       12
 13      15
 15      19
 19      20

df2:
start2   end2
 2        4
 9        11
 14       18

result: the result is the first table with column that shows if the overlap exists.

  start1   end1   overlap
     1       6       1
     6       8       0
     9       12      1
     13      15      1
     15      19      1
     19      20      0

thanks.

like image 620
Cina Avatar asked Sep 14 '25 21:09

Cina


1 Answers

You may also try foverlaps from data.table

library(data.table)
setkey(setDT(df1), start1, end1)
setkey(setDT(df2), start2, end2)
df1[,overlap:=foverlaps(df1, df2, which=TRUE)[, !is.na(yid),]+0]
df1
#   start1 end1 overlap
#1:      1    6       1
#2:      6    8       0
#3:      9   12       1
#4:     13   15       1
#5:     15   19       1
#6:     19   20       0
like image 83
akrun Avatar answered Sep 16 '25 11:09

akrun