如何处理 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"
我有时间的数据,例如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"