搜索号位于数字范围之间

时间:2018-04-23 13:56:47

标签: r

下面我有这些表包含一百万行,在这里我想看看表1目标开始表2目标开始之间是否存在重叠,依此类推目标结束。我怎样才能在R中实现这个目标?

表1 目标开始和目标结束(数字)

TargetStart TargetEnd
7756        8357
35598       35009
9954126     9954371
9954126     9954346
9954126     10115435

表2 目标开始和目标结束(数字)

Target_Start  Target_End        
7000           10000        
23184775       23190099 
900000         1000000      
23157928       23165621 
23157410       23158724     

所需的表格将包含状态重叠

Target_Start  Target_End    Overlaps
7000          10000         yes
23184775      23190099      no
90000         1000000       yes
23157928       23165621     no
23157410      23158724      no  

请有人帮你们这个吗? 感谢

p / s:我对之前的错字做了一些修改

1 个答案:

答案 0 :(得分:0)

您可以像这样使用data.table::inrange - 请注意,Table 1中很可能有拼写错误,而Desired Table根据实际输入所预期的结果不正确

cbind(tbl1, tbl2) %>%
  mutate(Overlaps = as.logical(pmax(data.table::inrange(TargetStart, Target_Start, Target_End), data.table::inrange(TargetEnd, Target_Start, Target_End))))

  # TargetStart TargetEnd Target_Start Target_End Overlaps
# 1        7756      8357         7000      10000     TRUE
# 2       35598     35009     23184775   23190099    FALSE
# 3     9954126   9954371        90000     100000    FALSE
# 4     9954126   9954346     23157928   23165621    FALSE
# 5     9954126  10115435     23157410   23158724    FALSE

数据

tbl1 <- read.table(text="TargetStart TargetEnd
7756        8357
35598       35009
9954126     9954371
9954126     9954346
9954126     10115435", header=TRUE)

tbl2 <- read.table(text="Target_Start  Target_End        
7000           10000        
23184775       23190099 
90000          100000       
23157928       23165621 
23157410       23158724", header=TRUE)