相关疑难解决方法(0)

如何展平/合并重叠的时间段

我有一个大的时间段数据集,由"开始"和"结束"列定义.有些时期重叠.

我想将所有重叠时间段组合(展平/合并/折叠)以具有一个"开始"值和一个"结束"值.

一些示例数据:

  ID      start        end
1  A 2013-01-01 2013-01-05
2  A 2013-01-01 2013-01-05
3  A 2013-01-02 2013-01-03
4  A 2013-01-04 2013-01-06
5  A 2013-01-07 2013-01-09
6  A 2013-01-08 2013-01-11
7  A 2013-01-12 2013-01-15
Run Code Online (Sandbox Code Playgroud)

期望的结果:

  ID      start        end
1  A 2013-01-01 2013-01-06
2  A 2013-01-07 2013-01-11
3  A 2013-01-12 2013-01-15
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  require(dplyr)
  data <- structure(list(ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L), class = "factor", .Label = "A"), 
    start = structure(c(1356998400, 1356998400, 1357084800, 1357257600, 
    1357516800, 1357603200, 1357948800), tzone = …
Run Code Online (Sandbox Code Playgroud)

datetime r date lubridate

13
推荐指数
3
解决办法
2189
查看次数

折叠具有重叠范围的行

我有一个包含开始和结束时间的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
Run Code Online (Sandbox Code Playgroud)

在此示例中,第2行和第3行中的范围完全在第1行的"start"和第4行的"stop"之间的范围内.因此,重叠范围1-4应折叠为一个范围:

> ranges
     start      stop
1 65.72000  87.75625
5 89.61625 104.94062
Run Code Online (Sandbox Code Playgroud)

我试过这个:

mdat <- outer(ranges$start, ranges$stop, function(x,y) y > x)
mdat[upper.tri(mdat)|col(mdat)==row(mdat)] <- NA
mdat
Run Code Online (Sandbox Code Playgroud)

而现在我只需要弄清楚如何结合所有真实的,但不确定它是否是最好的方法

r rows subset overlap overlapping

6
推荐指数
3
解决办法
1307
查看次数

标签 统计

r ×2

date ×1

datetime ×1

lubridate ×1

overlap ×1

overlapping ×1

rows ×1

subset ×1