我有一个数据集,我们称之为“时代”:
> 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行。
我真的很困惑如何找到重叠的时间间隔。因此,一行的“开始”与下一行的“结束”之间的差值至少为一。我需要它来将每一行与所有其他行进行比较。
我认为它会涉及循环和某种条件语句,但我在调试时遇到问题。希望我的输出只包括那些与其他行重叠的行。
答案 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。