r - 计算小时之间的差异,不考虑日期
问题描述
我有一个带有时间戳的向量,格式为:
"12:00:00"
它是 24 小时格式,我没有与这些时间戳相关的日期。我想计算这些之间的时间差。
所以和之间的区别,12
和和11 = 1
之间的区别。23
01 = 2
我想计算向量中的时间到给定时间的差,以便我得到一个具有时间差的向量。
数据:
head(x3)
[1] "12:00:00" "18:00:00" "21:00:00" "06:00:00" "00:00:00" "09:00:00"
如何解决这个问题?
解决方案
如果您只对小时的绝对差异感兴趣并且时间戳格式是一致的,您可以这样做
absDif <- abs(as.numeric(substr(test_time[2], 1, 2)) - as.numeric(substr(test_time[1], 1, 2)))
如果您还需要分钟,首先生成数字时间列可能更方便,例如在循环中
numericTimestamps[i] <- as.numeric(substr(test_time[i], 1, 2) +
as.numeric(substr(test_time[i], 4, 5) / 60 +
as.numeric(substr(test_time[i], 7, 8) / 60 / 60
编辑以解决修改后的问题:
如果我说对了,那么您不是在寻找绝对差异,而是在考虑白班时的简单时间差异。在这种情况下,如下建议的使用 dateTime 对象可能更直接。如果您想坚持使用数字,您需要自己考虑日期变化,例如通过添加 if 条件:
absDif <- as.numeric(substr(test_time[2], 1, 2)) - as.numeric(substr(test_time[1], 1, 2))
# if the first is smaller than the second, there was most probably a shift in date
if(as.numeric(substr(test_time[2], 1, 2)) < as.numeric(substr(test_time[1], 1, 2))){
# correct by 24 hours
absDif <- as.numeric(substr(test_time[2], 1, 2)) - (as.numeric(substr(test_time[1], 1, 2)) + 24)
}
推荐阅读
- android - Firestore 查询 Array 子集合
- bash - 如何在不使用变量的情况下从 Bash 中的字符串文字中删除后缀?
- ajax - Laravel 8 资源路由与 Ajax 编辑
- robotframework - 如何在 RF 中使用 OR 运算符?
- azure - Azure Functions .NET 5 隔离的 HttpTrigger 路径变量输入绑定
- flutter - 来自 Firestore 的动态数据列表的 Flutter 本地化
- c# - Unity getter 中的 SQLite 不起作用。返回 NullReferenceException
- performance - 如何解决错误“slow_flush_log_thres hold”?
- python - 当我尝试在“pythonanywhare.com”中部署我的 Web 应用程序时,我无法从远程服务器访问我的 PostgreSQL 数据库
- reactjs - React Firebase - 从用户集合中检索 photoURL 以在评论部分呈现