如何根据位数将数值转换为小时和分钟

How do I convert numeric value into hours and minutes depending upon the number of digits

我有一个向量,其中包含最近半小时的时间

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"

您可以使用 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"

看来x的字符数需要调整为至少3个字符 for format string "%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"

如果你想得到一个字符串,你可以用一些正则表达式绕过 strptime()

sub("(\d{2})", "\1:", sprintf("%04d", x))
[1] "00:30" "02:00" "22:00" "23:00"

另一种使用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"