2017-04-10 73 views
0

我的數據包含輪班工人的開始和結束時間。每位工作人員表示,我希望知道每次輪班的時間。通過條件計算時差

數據集是相當大的,許多工人和許多的變化,所以這裏是一個小例子:

  TimeStart   TimeFinish ShiftNo  Worker 
       <dttm>    <dttm> <fctr>  <fctr> 
1 2017-04-10 00:06:18 2017-04-10 00:06:19  S1 Caleb 
2 2017-04-10 00:19:56 2017-04-10 00:20:16  S1 Caleb 
3 2017-04-10 00:00:00 2017-04-10 00:00:20  S2 Caleb 
4 2017-04-10 00:08:32 2017-04-10 00:08:52  S2 Caleb 
5 2017-04-10 00:25:35 2017-04-10 00:25:55  S2 Caleb 
6 2017-04-10 00:00:00 2017-04-10 00:00:19  S3 Caleb 

我希望計算每個班次的長度,從最後減去TimeStart的第一項輸入TimeFinish

理想情況下,我想在dplyr中這樣做,但我不認爲這是正確的代碼?

ShiftDuration <- df %>% 
    group_by(Worker, Shift) %>% 
    summarise(Duration = TimeFinish-TimeStart) 

任何幫助將不勝感激。

回答

2

你快到了。您的group_by應該是(Worker, ShiftNo)(不是Shift,假設您的示例數據是正確的)。想必您希望每個工作人員每個班次的最小開始時間和最長結束時間:

df %>% 
    group_by(Worker, ShiftNo) %>% 
    summarise(Duration = max(TimeFinish) - min(TimeStart)) 

    Worker ShiftNo  Duration 
    <chr> <chr>  <time> 
1 Caleb  S1 13.96667 mins 
2 Caleb  S2 25.91667 mins 
3 Caleb  S3 19.00000 mins