我有一个非常大的数据框,其中包含两列,其中包含一天中大量任务的开始时间和结束时间。
我的目标是对30分钟间隔内发生的任务进行直方图(我可能需要更改间隔,但我认为这很容易)。
以下是示例数据框中我的开始和结束时间的示例:
StartTime <- c("8:30","8:25","10:15","11:30","12:15","12:30","1:00","2:35")
EndTime <- c("9:00","10:05","12:00","1:05","2:06","2:58","3:30","4:00")
TaskTimes <- data.frame(StartTime,EndTime)
我受到这个挑战,因为我必须考虑到开始时间和结束时间。
是否有一种简单的方法可以在不构建包含每个时间段内任务数量的临时数据框的情况下执行此操作?
答案 0 :(得分:0)
我认为,对于每个时刻,步行30分钟,您想知道当时有多少任务已启动但尚未完成。
将每个开始和结束从字符串转换为整数(分钟数),例如“8:30”到510.让数组名称为starts
和ends
。< / p>
创建一个数组temp [1440],用零填充它。如果所有开头都不同,请设置temp[starts]<-1
,temp[ends]<-temp[ends]-1
。
计算cumsum(temp)
答案 1 :(得分:0)
这是一些代码,我首先转换为时间戳,然后执行双循环以查找所有重叠,然后递增计数。
StartTime <- c("8:30","8:25","10:15","11:30","12:15","12:30","1:00","2:35")
EndTime <- c("9:00","10:05","12:00","1:05","2:06","2:58","3:30","4:00")
TaskTimes <- data.frame(StartTime,EndTime)
TaskTimes$s <- strptime(TaskTimes$StartTime, "%H:%M")
TaskTimes$e <- strptime(TaskTimes$EndTime, "%H:%M")
s <- as.numeric(strptime('0:00', "%H:%M"))
df <- data.frame(tick = seq(s, s + 24 * 60 * 60, 30 * 60), count = 0) # increment half hour
for (i in 1:nrow(df)) {
for (j in 1:nrow(TaskTimes)) {
# overlap (StartA <= EndB) and (EndA >= StartB)
if (df$tick[i] <= TaskTimes$e[j] & df$tick[i] + 30 * 60 >= TaskTimes$s[j]) {
df$count[i] <- df$count[i] + 1
}
}
}
plot(df)