【发布时间】:2021-10-02 18:49:59
【问题描述】:
我有不同人的数据 (ID)、他们工作的日期 (Date) 以及他们每个日期的工作小时数 (Hours)。
周一至周五被视为工作日。对于每个 ID,我想将连续的工作日分组。在确定工作日是否连续时,应省略周末和节假日。
一些例子:
如果一个人在周一、周二和周三工作,然后跳过周四并在周五再次工作,则周一至周三被视为一组,周五被视为另一组。
如果一个人每周在周四和周五工作,下周周一和周二工作,那么这四天应该在同一个组中。因此,在检查工作天是否连续时,会省略周末的天数。
如果一周的周一至周五和下周的周一至周五,那么我会将这整整两周视为连续工作日。
我还想考虑美国的常见假期(例如新年),因此 2020 年 12 月 31 日至 2021 年 1 月 4 日仍将算作连续工作日。
创建分组变量后,我想对每个组的工作时间求和。
示例数据:
df1 = structure(list(ID = c(1, 1, 1, 1, 2, 2, 3, 3,
3, 3), Date = structure(c(18781, 18782, 18785, 18750, 18687,
18688, 18626, 18627, 18631, 18634), class = "Date"), Hours = c(8,
8, 8, 16, 8, 8, 8, 8, 8, 8)), row.names = c(NA, -10L), class = "data.frame")
ID Date Hours
1 1 2021-06-03 8
2 1 2021-06-04 8
3 1 2021-06-07 8
4 1 2021-05-03 16
5 2 2021-03-01 8
6 2 2021-03-02 8
7 3 2020-12-30 8
8 3 2020-12-31 8
9 3 2021-01-04 8
10 3 2021-01-07 8
我想象我的输出看起来像这样:
ID Date1 Date2 Hours
1 1 2021-06-03 2021-06-07 24
# the weekend, June 5-6, is omitted
# when the group of consecutive working days is created
2 1 2021-05-03 2021-05-03 16
3 2 2021-03-01 2021-03-02 16
4 3 2020-12-30 2021-01-04 24
# the public holiday (Jan 1) and the weekend (Jan 2-3) are omitted
5 3 2021-01-07 2021-01-07 8
我的首要任务是至少弄清楚连续工作周,假期部分将是一个额外的奖励。
【问题讨论】: