【问题标题】:replace number with correct number of digits in r用r中正确的位数替换数字
【发布时间】:2015-05-26 11:24:07
【问题描述】:

在 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"

现在我的问题是:有没有办法用正则表达式输入个位数的零?

【问题讨论】:

  • 您可以使用sprintf 即。 library(stringr); sapply(str_extract_all(vec, '\\d+'), function(x) {x1 &lt;- as.numeric(x); sprintf('%02d:00-%02d:00', x1[1], x1[2])})

标签: regex r character gsub


【解决方案1】:

你需要再使用一个 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 匹配单词字符和非单词字符。

【讨论】:

    【解决方案2】:

    这是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"
    

    【讨论】:

      猜你喜欢
      • 2020-06-28
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 2021-05-22
      相关资源
      最近更新 更多