Как express десятичное время в формате ЧЧ: ММ - PullRequest
3 голосов
/ 13 марта 2020

У меня есть время в десятичном формате: 22,13 в часах, и я хотел бы express это в R как HH:MM. Я имею в виду, 22:08 (устаревающие секунды)

Кто-нибудь может мне помочь?

Ответы [ 2 ]

4 голосов
/ 13 марта 2020

Синтаксис %02.0f - округлить значение до целого числа и сделать его всегда равным 2 единицам. Следовательно, 7.8 минуты будут преобразованы в символы "08".

x <- c("22,13", "9,25", "7,8")

sprintf("%02d:%02.0f",
        as.numeric(sub(",\\d+", "", x)),
        as.numeric(sub("\\d+,", "0.", x)) * 60)

# [1] "22:08" "09:15" "07:48"
2 голосов
/ 14 марта 2020

Отсканируйте строку в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...