我有一个带有时间戳的向量,格式为:
"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"
如何解决这个问题?
答案 0 :(得分:2)
如果您只对小时的绝对差值感兴趣并且时间戳格式一致,则可以这样做
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)
}
答案 1 :(得分:2)
我们认为
上面为问题中的两个示例提供了以下内容。不使用任何软件包。
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
答案 2 :(得分:1)
一个基本的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.75
答案 3 :(得分:0)
这是使用lubridate
和dplyr
library(dplyr)
library(lubridate)
#>
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#>
#> date
times <- data_frame(times = hms(c("12:00:00", "18:00:00", "21:00:00", "06:00:00", "00:00:00", "09:00:00")))
times %>%
mutate(difference = hour(times) - lag(hour(times)))
#> # A tibble: 6 x 2
#> times difference
#> <S4: Period> <dbl>
#> 1 12H 0M 0S NA
#> 2 18H 0M 0S 6
#> 3 21H 0M 0S 3
#> 4 6H 0M 0S -15
#> 5 0S -6
#> 6 9H 0M 0S 9
由reprex package(v0.2.1)于2018-12-17创建