Отсканируйте строку в s
как число c, разделите ее на 24, чтобы мы могли преобразовать ее в класс times
(поскольку times
ожидает часть дня), округлите до минут и удалите завершающий :00
library(chron)
x <- c("22,13", "5,20") # test data
s <- scan(text = x, dec = ",", quiet = TRUE)
sub(":00$", "", round(times(s/24), "min")) ##
## [1] "22:08" "05:12"
Если вы предпочитаете обрезать секунды, а не округлять до ближайшей минуты, то замените round
на trunc
в строке, отмеченной ##, или замените всю эту строку на :
format(as.chron(s/24), format = "%H:%M") # truncate
Преобразование обратно
Если y
является результатом строки, помеченной ##, то они преобразуются обратно в класс times
и в число часов соответственно. Мы использовали round(..., 2)
в последней строке, чтобы получить то же количество цифр, что и исходный ввод, но если это не важно, его можно опустить.
y <- c("22:08", "05:12")
tt <- times(paste0(y, ":00"))
tt
## [1] 22:08:00 05:12:00
round(24 * as.numeric(tt), 2)
## [1] 22.13 5.20