问题描述
我试图了解我的数据集是否相互重叠(或相交)。让我在下面的示例中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
?