用 r 中正确的位数替换数字

replace number with correct number of digits in r

在 R 中,我有以下向量,我正在尝试获得以下结果:

vec <- c("6-9 h", "9-13 h", "13-16 h", "16-18 h")
res <- c("06:00-09:00", "09:00-13:00", "13:00-16:00", "16:00-18:00")

我使用 gsub 函数的方法部分有效

gsub("(.*)-(.*) (.*)", "\1:00-\2:00", vec)
# result:
"6:00-9:00"   "9:00-13:00"  "13:00-16:00" "16:00-18:00"

现在我的问题是:有没有一种方法可以使用正则表达式为单个数字输入零?

您需要再使用一个 gsub 函数。

> vec <- c("6-9 h", "9-13 h", "13-16 h", "16-18 h")
> m <- gsub("(.*)-(.*) (.*)", "\1:00-\2:00", vec)
> gsub("\b(\d):", "0\1:", m)
[1] "06:00-09:00" "09:00-13:00" "13:00-16:00" "16:00-18:00"

\b(\d): 匹配恰好一位数字的数字。 \b 匹配单词字符和非单词字符。

这是一个 sprintf 方法:

sapply(regmatches(vec, gregexpr("\d+", vec)), function(x) { 
  x <- as.numeric(x)
  sprintf("%02d:00-%02d:00", x[1], x[2])
}) 
# [1] "06:00-09:00" "09:00-13:00" "13:00-16:00" "16:00-18:00"