如何处理 R 中每个距离数据的次数

How to deal with times per distance data in R

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

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

我试过这个来计算它:

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

但是这个 returns: Ops.POSIXt(strptime(timeVar, "%M.%S"), distance) 错误: 未为 "POSIXt" 个对象定义“/”。

使用 lubridate 包我可以这样计算:

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

which returns [1] "117.116666666667s (~1.95 minutes)" 但我希望结果的格式为 ("%M:%OS")。有没有必要的方法来处理这个?例如,我想在其中一个轴上使用格式的地方绘制数据,但我也想使用这些数据进行回归分析。 POSIXt 格式也可能发生类似的事情。

您可以 seconds_to_period(在 lubridate 中)将其放入 minutes/seconds。然后,用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

希望对您有所帮助。

我找到了使用 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

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

library(lubridate)

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