【发布时间】:2015-07-16 18:23:00
【问题描述】:
我有一组不同 id 的区间。例如:
df <- data.frame(id=c(rep("a",4),rep("b",2),rep("c",3)), start=c(100,250,400,600,150,610,275,600,700), end=c(200,300,550,650,275,640,325,675,725))
每个id的区间不重叠,但不同id的区间可能重叠。这是一张图片:
plot(range(df[,c(2,3)]),c(1,nrow(df)),type="n",xlab="",ylab="",yaxt="n")
for ( ii in 1:nrow(df) ) lines(c(df[ii,2],df[ii,3]),rep(nrow(df)-ii+1,2),col=as.numeric(df$id[ii]),lwd=2)
legend("bottomleft",lwd=2,col=seq_along(levels(df$id)),legend=levels(df$id))
我正在寻找的是两个功能: 1. 将这些区间合并的函数。 对于上面的例子,它会返回这个data.frame:
union.df <- data.frame(id=rep("a,b,c",4), start=c(100,400,600,700), end=c(325,550,675,725))
- 一个与这些区间相交的函数,仅当该范围的所有 id 重叠时才保留一个范围。 对于上面的例子,它会返回这个data.frame:
intersection.df <- data.frame(id="a,b,c", start=610, end=640)
【问题讨论】:
-
试试 ?intersect 和 ?union
-
intersect和union不起作用 - 它们适用于离散集,而不是区间。 -
您能否澄清一下如何获得“这些区间及其交集的并集”,以及这如何与您的 id 一起使用?假设您在一个人中已经有多个不重叠的间隔,所有间隔的交集将为空。同样,我不明白工会是从哪里来的。