如何解决任何建议在r中找到两个连续变量的交集
如何找到一些连续变量的交集百分比,请参见下面的示例?
d1<-data.frame(Start=c(10,8,6,4 ),End=c(14,12,9,17 ))
我想检查A和B列的每一行是否与其余行重叠,而不是for循环?例如,
d1[1,] %overlaps% d1[2,]
和d1[1,] %overlaps% d1[3,]
和..最后,d3[1,] %overlaps% d4[3,]
该怎么做?
解决方法
如下所示,确定由端点Start
和End
定义的实线中的一个片段是否与另一片段重叠。使用combn
创建行组合,并将匿名函数应用于每个组合。
`%overlaps%` <- function(X,Y){
f <- function(x,y){
a1 <- x[1] <= y[1] && y[1] <= x[2]
a2 <- x[1] <= y[2] && y[2] <= x[2]
a1 || a2
}
f(X,Y) || f(Y,X)
}
combn(1:nrow(d1),2,function(x) {
d1[x[1],] %overlaps% d1[x[2],]
})
#[1] TRUE FALSE TRUE TRUE TRUE TRUE
,
请注意,Start
中的d1
是以降序给出的,您只需要检查下一个间隔的End
值是否大于当前的Start
值,例如,
> unlist(sapply(1:(nrow(d1)-1),function(k) d1$End[-(1:k)]>=d1$Start[k]))
[1] TRUE FALSE TRUE TRUE TRUE TRUE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。