我有一个带有时间戳格式的向量:
"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"如何处理这个问题?
发布于 2018-12-17 15:33:01
如果您只对时间的绝对差异感兴趣,并且时间戳格式是一致的,那么您可以这样做。
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)
}发布于 2018-12-17 16:21:45
我们假设
以上为问题中的两个例子提供了以下内容。不使用包装。
Diff <- function(t1, t2) {
h1 <- as.numeric(sub(":.*", "", t1))
h2 <- as.numeric(sub(":.*", "", t2))
h1 - h2 + 24 * (h1 < h2)
}
Diff("12:00:00", "11:00:00")
## [1] 1
Diff("1:00:00", "23:00:00")
## [1] 2如果我们希望计算下面所示的v与"12:00:00"之间的差额,比如说:
v <- c("12:00:00", "18:00:00", "21:00:00", "06:00:00", "00:00:00", "09:00:00")
Diff(v, "12:00:00")
## [1] 0 6 9 18 12 21发布于 2018-12-17 15:30:01
一个基本的R选项将是使用您的数据形成临时的日期时间,通过附加一些任意的日期。然后,使用strptime和difftime查找以小时为单位的差异:
t1 <- "12:00:00"
t2 <- "10:15:00"
date <- "2018-01-01"
as.numeric(difftime(strptime(paste(date, t1), "%Y-%m-%d %H:%M:%S"),
strptime(paste(date, t2), "%Y-%m-%d %H:%M:%S")))
[1] 1.75https://stackoverflow.com/questions/53818163
复制相似问题