如何在多个时间间隔内使用“重叠”功能?

问题描述

我试图了解我的数据集是否相互重叠(或相交)。让我在下面的示例中df1 df2进行解释,start列的意思是该行的间隔从该点开始,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,110,170),150,190))

edit1:

 library(DescTools)

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

edit2:我的解决方案是:对于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)

解决方法

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

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,`%overlaps%`,x))))
# [1] TRUE

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...