Как преобразовать числовое значение в часы и минуты в зависимости от количества цифр - PullRequest
3 голосов
/ 09 июля 2019

У меня есть вектор, который содержит время ближайших полчаса

x <- c(30,200,2200,2300)

Мне нужно преобразовать это в

output <- c(00:30,02:00,22:00,23:00).

Я не могу преобразовать значения, которые меньше 4 цифр.
Пожалуйста, предложите. strptime(), as.Date() бросает NA для первого элемента.

Я пытался использовать приведенный ниже код, и он не работал. Пожалуйста, предложите

Код:

x <- c(30,200,2200,2300)

output <- format(strptime(x,"%H%M"),"%H:%M")
output
#[1] NA      "20:00" "22:00" "23:00"

Ответы [ 4 ]

1 голос
/ 09 июля 2019

Вы можете использовать sprintf, чтобы добавить начальные нули.

x <- c(30, 200, 2200, 2300)
format(strptime(sprintf("%04d", x), format="%H%M"), format="%H:%M")
# [1] "00:30" "02:00" "22:00" "23:00"
0 голосов
/ 09 июля 2019

Еще один способ использования formatC

x <- c(30, 200, 2200, 2300)
formatC(x, width = 4, flag = "0", big.mark = ":", big.interval = 2)
#[1] "00:30" "02:00" "22:00" "23:00"
0 голосов
/ 09 июля 2019

Если вы хотите получить символьную строку, вы можете обойти strptime() с некоторым регулярным выражением:

sub("(\\d{2})", "\\1:", sprintf("%04d", x))
[1] "00:30" "02:00" "22:00" "23:00"
0 голосов
/ 09 июля 2019

Кажется, что число символов в x должно быть откорректировано как минимум до 3 символов для строки формата "%H%M", чтобы понять, что во всех случаях есть час.

tmp <- strptime(ifelse(nchar(x) <= 3, paste("0", x), x),"%H%M")
output <- format(tmp,"%H:%M")
output
#[1] "00:30" "02:00" "22:00" "23:00"
...