在 R 中的文件名中填充数字

问题描述 投票:0回答:1

我用过

PadNumbers <- function(numbers) {
  assertIntegerish(numbers, min.len = 0, lower = 0)
  strnumbers <- as.character(numbers)
  numbers <- as.numeric(gsub(".*?(\\d+).*", "\\1", strnumbers))
  if (any(!is.na(numbers))) {
    maxdigits <- max(nchar(as.character(numbers)), na.rm = TRUE)
  } else {
    maxdigits <- 0
  }
  paddednumbers <- sprintf(paste0("%0", maxdigits, "d"), numbers)
  paddednumbers[is.na(numbers)] <- NA
  return(paddednumbers)
}

这样: ex01PadNumbers(c(1, 2, 30)) 输出 c("01", "02", "30")

我想在文件名中填充数字,如

PadNumbers

这样:ex02PadFiles(c(“podcast_ep1.mp3”,“podcast_ep3.mp3”,“podcast_ep22.mp3”))

输出 c("podcast_ep01.mp3", "podcast_ep03.mp3", "podcast_ep22.mp3")

ex02PadFiles <- function(filenames) {
  assertCharacter(filenames, any.missing = FALSE, len = length(filenames))
  if (length(filenames) == 0) {
    return(character(0))
  }
  paddednumbers <- ex01PadNumbers(as.integer(gsub("\\D", "", filenames)))
  paddedfilenames <- gsub("(\\d+)(\\.\\w+)$", "0\\1\\2", filenames)
  return(paddedfilenames)
}

但我的输出是: c("podcast_ep01.mp3", "podcast_ep03.mp3", "podcast_ep022.mp3") 但最后一个元素应该保留,因为已经有两位数字

我更改了代码,但它不起作用

r padding assert
1个回答
0
投票
library(tidyverse)

strings <- c("podcast_ep1.mp3", "podcast_ep3.mp3", "podcast_ep22.mp3")

pad_numbers <- function(string) {
  num <- str_extract_all(string, "\\d+") %>% 
    pluck(1, 1) 
  
  str_replace(string = string, 
              pattern = num, 
              replacement = if_else(str_length(num) < 2, str_c("0", num), num))

}

map_chr(strings, pad_numbers)

[1] "podcast_ep01.mp3" "podcast_ep03.mp3" "podcast_ep22.mp3"
© www.soinside.com 2019 - 2024. All rights reserved.