【发布时间】:2023-03-04 14:35:01
【问题描述】:
我什至不确定我是否在标题中准确地描述了问题,但这里是。
假设我有以下data.table/data.frame:
library(data.table)
library(lubridate)
DT <- data.table(begin = c("2019-06-01 09:00:00","2019-06-01 09:00:00", "2019-06-01 09:00:00",
"2019-06-01 09:00:00", "2016-06-01 09:00:00","2016-06-01 09:00:00"),
end = c("2019-06-03 14:00:00", "2019-06-03 14:00:00", "2019-06-03 14:00:00",
"2019-06-02 05:00:00", "2019-06-02 05:00:00", "2016-06-01 23:15:00"),
person = c("A", "A","A", "B", "B", "C"))
begin end person
1: 2019-06-01 09:00:00 2019-06-03 14:00:00 A
2: 2019-06-01 09:00:00 2019-06-03 14:00:00 A
3: 2019-06-01 09:00:00 2019-06-03 14:00:00 A
4: 2019-06-01 09:00:00 2019-06-02 05:00:00 B
5: 2016-06-01 09:00:00 2019-06-02 05:00:00 B
6: 2016-06-01 09:00:00 2016-06-01 23:15:00 C
这本质上是一个数据集,汇总了每个人某个时期的开始和结束时间的时间戳。每个人的行数按时间段跨越的天数重复。例如,人员A 具有相同“班次”的三个条目,因为他们的班次跨越三个不同的日期,06-01、06-02 和 06-03。这些条目按班次跨越的日期数重复,但有些班次在同一天开始和结束。
我想要更新上述数据集的开始和结束日期,以便我可以看到每个班次在天级别的开始和结束时间。所以数据集应该是这样的:
begin end person
1: 2019-06-01 09:00:00 2019-06-02 00:00:00 A
2: 2019-06-02 00:00:00 2019-06-03 00:00:00 A
3: 2019-06-03 00:00:00 2019-06-03 14:00:00 A
4: 2019-06-01 09:00:00 2019-06-02 00:00:00 B
5: 2016-06-02 00:00:00 2019-06-02 05:00:00 B
6: 2016-06-01 09:00:00 2016-06-01 23:15:00 C
任何帮助将不胜感激!
【问题讨论】:
-
所以您想用
00:00替换每个14:00(例如A)以反映新的一天?您可以使用last,如果时间不等于last的时间,请将其更改为00:00?但是,为什么要保留所有值?他们整夜工作吗? -
@NelsonGon,是的,这正是我想要做的。当轮班可能超过一天时,我正在尝试区分每天的工作量。
-
您的数据不是表明 A 的转变是连续的吗?将跨越 3 个日历日 2019-06-01 09:00:00 到 2019-06-03 14:00:00 的班次解析为三个人为班次,您会得到什么?
-
@NelsonGon,原因是我想知道一天用了多少分钟的劳动力。
-
用户
B从 2016 年到 2019 年真的工作了吗?
标签: r dplyr data.table lubridate