2016-11-14 104 views
0

我有一個非常大的數據框,其中包含兩列,其中包含一天中大量任務的開始時間和結束時間。以時間間隔對任務數進行直方圖編排

我的目標是直方圖發生的間隔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

你可以舉個例子,那麼對於第2行,你將在那個時間框架中有3個任務? –

+0

正確。因此,您將X軸上的時間軸劃分爲半個小時的時間間隔,並且每個時間間隔中的任務數將被直方圖化。 –

回答

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) 
+0

嘗試barplot(df $ count)看起來像直方圖。 –

0

我假設在每個時刻,以30分鐘的步幅,你想知道有多少任務在那一刻開始並沒有完成。

  1. 變換每個開始和從串端到整數(分鐘數),例如,「8:30」,以510讓陣列名稱是startsends

  2. 製作一個數組temp [1440],填充零。如果所有啓動都不同,請設置temp[starts]<-1,temp[ends]<-temp[ends]-1

  3. 計算cumsum(temp)

相關問題