如何根据位数将数值转换为小时和分钟
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"
我有一个向量,其中包含最近半小时的时间
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"