2

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

> 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。我需要它将每一行与所有其他行进行比较。

我在想它会涉及一个循环和某种条件语句,但我在调试时遇到了麻烦。我的输出希望只包括那些与其他行重叠的行。

4

1 回答 1

1

如果您将此视为 N x 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。

于 2013-07-16T04:11:44.430 回答