如何解决如何在R中将时间长度转换为数字?
我有一个数据框,其中包含完成一圈所需的时间,我正在尝试将其分成每个车手的单独数据框。
这些时间值看起来像这样,以分钟:秒.毫秒为单位,除了第一圈在秒和毫秒之间有一个冒号。
13:14:50 1:28.322 1:24.561 1:23.973 1:23.733 1:24.752
我想将这些以秒格式保存在一个单独的数据框中。
794.500 88.322 84.561 83.973 83.733 84.752
当我将其转换为数字时,它会给出以下值。
214 201 174 150 133 183
当我使用 strptime
或 POSIXlt
时,它给了我巨大的值,这些值也是错误的,即使我使用格式代码也是如此。但是,我减去了 2 个值以发现时差是正确的,并且通过该值我发现所有值都偏离了 1609164020
。此外,这些值忽略了我需要的十进制值。
解决方法
您可以将 POSIXlt 与秒的转换结合使用。
首先,为您的第一个时间元素添加一个日期:
ds <- c("13:14:50","1:28.322","1:24.561","1:23.973","1:23.733","1:24.752")
ds[1] <- paste( Sys.Date(),ds[1] )
#[1] "2020-12-29 13:14:50" "1:28.322" "1:24.561"
#[4] "1:23.973" "1:23.733" "1:24.752"
创建一个函数将后续的minutes:seconds.milliseconds 转换为seconds.milliseconds:
to_sec <- function(x){ as.numeric(sub( ":.*","",x )) * 60 +
as.numeric( sub( ".*:",x ) ) }
将向量转换为启用时差计算的日期:
ds[2:6] <- to_sec(ds[2:6])
ds[2:6] <- cumsum(ds[2:6])
dv <- c( as.POSIXlt(ds[1]),as.POSIXlt(ds[1]) + as.numeric(ds[2:6]) )
# [1] "2020-12-29 13:14:50 CET" "2020-12-29 13:16:18 CET"
# [3] "2020-12-29 13:17:42 CET" "2020-12-29 13:19:06 CET"
# [5] "2020-12-29 13:20:30 CET" "2020-12-29 13:21:55 CET"
dv[6] - dv[1]
# Time difference of 7.089017 mins
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。