首页 > 解决方案 > 在 R 中转换一般时间(无日期)

问题描述

我有一个关于在 R 中转换时间的问题。

  1. 首先,我需要将存储为字符的时间转换为数字。时间作为开始时间存储在一列中,完成时间存储在另一列中。例如:工作开始时间:09:00,工作结束时间:17:00。
  2. 然后,我希望能够使用函数计算多行数据的这些时间(即小时)之间的时间。即某人平均每天工作多少小时?
  3. 最后,我想比较早开始时间和早结束时间与晚开始时间和晚结束时间。例如,通过为这些时间分配一个类别。例如,在 10:00 之前开始工作的人将在一个列中归类为“早起”,在另一列中将 10:00 之后开始的人归类为“迟到”,然后在 17 点之前完成工作的人: 00 会在一列中被归类为“提前完成者”,然后在 17:00 之后完成工作的人将在另一列中被归类为“迟到者”。当您没有指定日期时,R 有没有办法以这种方式识别时间?

到目前为止,我所阅读的所有建议似乎都是针对某个日期内的特定时间的。例如 DD/MM/YY HH:MM。我只关心每天的时间。

提前致谢。

标签: r

解决方案


您可以尝试lubridate

library(lubridate)
set.seed(4)
df <- data.frame(start=paste0(sample(7:11,10,replace = T),".00"),finish=paste0(sample(16:19,10,replace = T),".00"))
df$duration <- hm(df$finish)-hm(df$start)
df$start_cat <- ifelse(hm(df$start)<hm("10.00"),"early_starter","late_starter")
df$finish_cat <- ifelse(hm(df$finish)<hm("17.00"),"early_finisher","late_finishe")

输出:

   start finish  duration     start_cat     finish_cat
1   9.00  19.00 10H 0M 0S early_starter   late_finishe
2   9.00  18.00  9H 0M 0S early_starter   late_finishe
3   9.00  18.00  9H 0M 0S early_starter   late_finishe
4  10.00  18.00  8H 0M 0S  late_starter   late_finishe
5   9.00  18.00  9H 0M 0S early_starter   late_finishe
6  11.00  16.00  5H 0M 0S  late_starter early_finisher
7   8.00  19.00 11H 0M 0S early_starter   late_finishe
8   9.00  19.00 10H 0M 0S early_starter   late_finishe
9   8.00  16.00  8H 0M 0S early_starter early_finisher
10  7.00  16.00  9H 0M 0S early_starter early_finisher

推荐阅读