我有时间的地方有数据,例如行驶一定距离(例如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格式可能会发生类似的情况。
答案 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