【发布时间】:2017-06-04 12:04:52
【问题描述】:
我有一个带有开始和结束时间的 data.frame:
ranges<- data.frame(start = c(65.72000,65.72187, 65.94312,73.75625,89.61625),stop = c(79.72187,79.72375,79.94312,87.75625,104.94062))
> ranges
start stop
1 65.72000 79.72187
2 65.72187 79.72375
3 65.94312 79.94312
4 73.75625 87.75625
5 89.61625 104.94062
在此示例中,第 2 行和第 3 行中的范围完全在第 1 行的“开始”和第 4 行的停止之间的范围内。因此,重叠的范围 1-4 应该折叠到一个范围:
> ranges
start stop
1 65.72000 87.75625
5 89.61625 104.94062
我试过这个:
mdat <- outer(ranges$start, ranges$stop, function(x,y) y > x)
mdat[upper.tri(mdat)|col(mdat)==row(mdat)] <- NA
mdat
现在我只需要弄清楚如何组合所有真实的,但不确定这是否是最好的方法
【问题讨论】:
-
看起来不太容易。你已经看过 dplyr 了吗?将是我第一次尝试解决。
-
我试过这个:
mdat <- outer(ranges$start, ranges$stop, function(x,y) y > x) mdat[upper.tri(mdat)|col(mdat)==row(mdat)] <- NA mdat现在我只需要弄清楚如何组合所有真实的,但不确定这是否是最好的方法 -
您将什么定义为重叠?
-
我猜如果下一行的开始在上一行的范围内,那么我想保留下一行的“停止”。因此,如果下一行的起点是 73.75625(止损在 87.75625),而前一行的范围是 65.94312 到 79.94312,那么我希望有一个范围作为两者的组合,基本上是包含两者的范围: 65.94312 到 87.75625
标签: r subset rows overlap overlapping