r - 在 R 中转换一般时间(无日期)
问题描述
我有一个关于在 R 中转换时间的问题。
- 首先,我需要将存储为字符的时间转换为数字。时间作为开始时间存储在一列中,完成时间存储在另一列中。例如:工作开始时间:09:00,工作结束时间:17:00。
- 然后,我希望能够使用函数计算多行数据的这些时间(即小时)之间的时间。即某人平均每天工作多少小时?
- 最后,我想比较早开始时间和早结束时间与晚开始时间和晚结束时间。例如,通过为这些时间分配一个类别。例如,在 10:00 之前开始工作的人将在一个列中归类为“早起”,在另一列中将 10:00 之后开始的人归类为“迟到”,然后在 17 点之前完成工作的人: 00 会在一列中被归类为“提前完成者”,然后在 17:00 之后完成工作的人将在另一列中被归类为“迟到者”。当您没有指定日期时,R 有没有办法以这种方式识别时间?
到目前为止,我所阅读的所有建议似乎都是针对某个日期内的特定时间的。例如 DD/MM/YY HH:MM。我只关心每天的时间。
提前致谢。
解决方案
您可以尝试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
推荐阅读
- javascript - 如何告诉 Vuejs 查看子数据条目
- c++ - 没有转换函数 c++
- r - 有没有办法根据在 R 中用逗号分隔值的列对数据进行分组?
- magento - Magento 2.3.5 违反以下内容安全政策
- docker - Windows Server 2019 上的 Docker 错误 4294967295
- ruby-on-rails - 集合为 RadioButtons onclick
- vue.js - 已经使用 Vue.js 登录后的路由器保护登录页面
- python - 神经网络 - Keras - keyError:'acc'
- javascript - PayPal Orders API Express Checkout - CaptureOrder ID 问题
- c# - 碰撞时如何使两个立方体停止?