如何处理R中每距离数据的时间

时间:2019-05-02 18:36:54

标签: r lubridate

我有时间的地方有数据,例如行驶一定距离(例如3000 m)所需的11:42.7(格式为“%M:%OS”)。现在,我希望能够计算分段时间(例如每500 m所需的时间)。

timeVar  <- "11:42.7"
distance <- 3000

我尝试过这样计算:

(strptime(timeVar, "%M.%S")/distance)*500

但是返回:Ops.POSIXt(strptime(timeVar,“%M.%S”),distance)中的错误:   未为“ POSIXt”对象定义“ /”。

使用lubridate软件包,我可以计算出这一点:

library(lubridate)
(as.duration(ms(timeVar))/distance)*500

返回[1]“ 117.116666666667s(〜1.95分钟)”,但我希望结果格式为(“%M:%OS”)。有需要处理的方法吗?例如,我想在其中一个轴上使用格式的地方绘制数据,但我也想将数据用于回归分析。 POSIXt格式可能会发生类似的情况。

3 个答案:

答案 0 :(得分:3)

您可以seconds_to_period(在润滑中)将其设置为分钟/秒。然后,使用sprintf对其进行格式化,如下所示:

time <- seconds_to_period((as.duration(ms(timeVar))/distance)*500)

sprintf('%02d:%2.1f', minute(time), second(time)) # 01:57.1
#or using paste0
paste0(minute(time),':',round(second(time),1))  # 1:57.1
#or if you want it with hours
paste0(time@hour,':',minute(time),':',round(second(time),1)) # 0:1:57.1

希望有帮助。

答案 1 :(得分:2)

如果您转换为period,则可以使用sprintf

library(lubridate)

d <- as.period(as.duration(ms(timeVar))/distance*500)
sprintf('%02d:%2.1f', minute(d), ms(d))
# "01:57.1"

答案 2 :(得分:1)

我找到了使用hms软件包的解决方案:

library(hms)
timeVar1 <- strptime(timeVar, "%M:%OS")
timeVar1 <- as.hms(timeVar1)

split500 <- (timeVar1/distance)*500
# Time difference of 117.1167 secs

split500 <- as.hms(split500)
# 00:01:57.116667