下面我有这些表包含一百万行,在这里我想看看表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:我对之前的错字做了一些修改答案 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)