如何使用 'overlaps' 函数进行多个间隔?
how to use 'overlaps' function for multiple intervals?
我试图了解我的数据集是否相互重叠(或交叉)。让我用下面的例子解释一下 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,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
?
我试图了解我的数据集是否相互重叠(或交叉)。让我用下面的例子解释一下 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,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
?