如何使用 'overlaps' 函数进行多个间隔?

how to use 'overlaps' function for multiple intervals?

我试图了解我的数据集是否相互重叠(或交叉)。让我用下面的例子解释一下 df1 df2start 列表示,行的间隔从该点开始,stop 表示间隔在该点结束。我试图了解每一行是否相互交叉,如果任何人不相交,输出将为 FALSE。因此,R 中有 'overlaps'(来自 DescTools 包)函数,但它不支持检查多个重叠区域。您可以看到 df1 数据集,其中所有行都相互交叉,另一方面,df2 不符合此规则,因为第 5 行不与第 2 行或第 4 行相交,这是我的预期输出例如,是 TRUE FALSE; df1 的输出为 TRUE,df2 的输出为 FALSE。谢谢。

df1<-data.frame(start=c(100,90,130,110), stop=c(200,140,270,150))

df2<-data.frame(start=c(100,90,130,110, 170), stop=c(200,140,270,150,190))

编辑1:

 library(DescTools)

(1,3) %overlaps% (2,5),我尝试对数据集的每一行执行此操作,我的意思是每一行与其他行相比 %overlaps%

edit2:我的解决方案是:for df1

 x<-combinations(nrow(df1),2)
    
    TF <- NULL
    for (ill in 1:nrow(x)) {TF[ill]<- df[x[ill,1],] %overlaps% df[x[ill,2],]  }
    T<-all(TF)

您只需要 none 行在任何行停止后开始,

min(df1$stop) >= max(df1$start)
#> [1] TRUE
min(df2$stop) >= max(df2$start)
#> [1] FALSE

我不确定,我是否正确地回答了你的问题。但你是否可以寻找像

这样的东西
library(DescTools)
 
all(apply(df1, 1, function(x) all(apply(df1, 1, `%overlaps%`, x))))
# [1] TRUE

all(apply(df2, 1, function(x) all(apply(df2, 1, `%overlaps%`, x))))
# [1] FALSE

?