比较后续行并找到重叠的时间间隔?

时间:2013-07-16 02:21:12

标签: r dataframe

我有一个数据集,我们称之为“时代”:

> Times <- read.csv("Times.csv, header=TRUE)
> Times
Num     Start          End
1       00:09:41       00:25:025
2       00:11:21       00:41:32
3       00:34:39       00:58:01

所以这些只是几行数据,但有近50行。

我真的很困惑如何找到重叠的时间间隔。因此,一行的“开始”与下一行的“结束”之间的差值至少为一。我需要它来将每一行与所有其他行进行比较。

我认为它会涉及循环和某种条件语句,但我在调试时遇到问题。希望我的输出只包括那些与其他行重叠的行。

1 个答案:

答案 0 :(得分:1)

如果你认为这是一个N×N的比较,我会想象答案是某种不规则的带状矩阵。 (如果带矩阵不是您以前见过的术语,请查看。)此代码应测试第二列高端的重叠是否大于第一列,即重叠:

 Times <- read.table(text="
 Num     Start          End
 1       00:09:41       00:25:25
 2       00:11:21       00:41:32
 3       00:34:39       00:58:01", stringsAsFactors=FALSE, header=TRUE)
 mdat <- outer(Times$Start, Times$End, function(x,y) y > x)
 mdat[upper.tri(mdat)|col(mdat)==row(mdat)] <- NA
 mdat
#------------------
      [,1] [,2] [,3]
[1,]    NA   NA   NA
[2,]  TRUE   NA   NA
[3,] FALSE TRUE   NA

你对对角线不感兴趣,因为End总是大于Start,测试矩阵的上三角部分都是TRUE。