按条件计算时差

时间:2017-04-10 05:06:40

标签: r dplyr

我的数据包含轮班工人的开始和结束时间。根据每个工人的说法,我想知道每个班次的持续时间。

数据集非常庞大,有很多工人和很多班次,所以这里有一个小例子:

           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)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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