Как работать с данными о времени на расстояние в R

У меня есть данные, где у меня есть время, например 11: 42.7 (формат «% M:% OS»), которые требовались для прохождения определенного расстояния (например, 3000 м). Теперь я хочу иметь возможность рассчитать промежуточное время (например, время, необходимое на 500 м).

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.


person JAQuent    schedule 02.05.2019    source источник


Ответы (3)


Вы можете seconds_to_periodlubridate) преобразовать его в минуты / секунды. Затем используйте 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

Надеюсь, поможет.

person Taher Ahmed Ghaleb    schedule 02.05.2019

Если вы конвертируете в period, вы можете использовать sprintf:

library(lubridate)

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

Я нашел решение с помощью пакета 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
person JAQuent    schedule 02.05.2019