我的数据包含轮班工人的开始和结束时间。根据每个工人的说法,我想知道每个班次的持续时间。
数据集非常庞大,有很多工人和很多班次,所以这里有一个小例子:
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)
非常感谢任何帮助。
答案 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