【发布时间】:2019-02-01 03:17:04
【问题描述】:
我正在尝试合并重叠间隔以计算唯一间隔的总和,同时删除排除的间隔。
这是一个最小的工作示例:
mydata <- data.frame(interval = c(1,2,3,4,5,6,7,8,9,10),
timeoutStart = c(280,500,NA,NA,NA,NA,NA,NA,NA,NA),
timeoutEnd = c(310,530,NA,NA,NA,NA,NA,NA,NA,NA),
cheeringStart = c(1,181,205,330,460,740,NA,NA,NA,NA),
cheeringEnd = c(120,199,300,420,475,760,NA,NA,NA,NA),
possessionStart = c(80,180,210,250,350,450,550,650,750,800),
possessionEnd = c(130,200,220,280,400,499,600,700,800,950)
)
interval timeoutStart timeoutEnd cheeringStart cheeringEnd possessionStart possessionEnd
1 280 310 1 120 80 130
2 500 530 181 199 180 200
3 NA NA 205 300 210 220
4 NA NA 330 420 250 280
5 NA NA 460 475 350 400
6 NA NA 740 760 450 499
7 NA NA NA NA 550 600
8 NA NA NA NA 650 700
9 NA NA NA NA 750 800
10 NA NA NA NA 800 950
在上面的最小工作示例中,我想计算球队花在欢呼或控球上的总时间(不包括暂停)。矩阵中的值表示每个结果(timeout、cheering 或 possession)的不同间隔的开始和结束时间(自游戏开始后经过的秒数)。结果不是相互排斥的,可以同时发生。但是,我不想“重复计算”cheering 和 possession 的重叠间隔。也就是说,我想合并cheering和possession的重叠区间,这样我就可以对“唯一”区间求和了。
例如,一个欢呼间隔发生在 740 到 760 秒之间,而一个控球间隔与该间隔重叠(750 到 800 秒)。合并后的时间间隔为 740 到 800 秒(持续时间 = 60 秒)。
合并cheering 和possession 的重叠间隔后,我想排除超时间隔。例如,对于 205 到 300 秒的唯一间隔,我想排除 280 到 310 秒的超时间隔。因此,不包括超时间隔的唯一间隔将是 205 到 280 秒(持续时间 = 75 秒)。
我想计算每个唯一间隔 (End – Start) 的持续时间,不包括超时间隔,然后计算所有这些唯一间隔持续时间的总和(不包括超时间隔)。最后,我希望能够根据该行中另一个变量(keep = 0 或 1)的值在计算中包含或排除区间。
假设Start 和End 时间列没有预先排序。我还希望该方法能够推广,以便能够轻松添加多个附加列集以包含在总和中(例如,运球、传球等)。我查看了其他答案,但没有找到一种方法将他们的解决方案概括为我的情况。
【问题讨论】: