使用 str_c() 零消失

zeros disappear using str_c()

我遇到了一个我不明白的问题。

我想把字符串放在一起,具体取决于字符数:

矢量 c("1", "23", "302", "2004") 应转换为 c("1900001", "1900023", "1900302", "1902004")

因此我使用了这个代码:

test <- c("1", "23", "302", "2004")
fun_function <- function(test){

  if(nchar(test == 4)){
    str_c("190",test, sep="")
  } else {
    if(nchar(test == 3)){
      str_c("1900", test, sep="")
    } else{
      if(nchar(test == 2)){
        str_c("19000", test, sep="")
      } else{
        if(nchar(test == 1)){
          str_c("190000", test, sep="")
        }
      }
    }
  }
}

res <- map(test, 
    ~fun_function(.x)) %>% 
  unlist()

但是,我得到的不是 c("1900001", "1900023", "1900302", "1902004"),而是 c("1901", "19023", "190302", "1902004")

现在,为什么我得到那个向量?如果我将此函数用于单个案例,它会起作用:

nchar("1") == 1
str_c("190000", "1", sep="")

那么,问题出在哪里呢?我只是不明白我的结果的原因。有人可以帮我弄这个吗?我也尝试了使用相同逻辑的 For 循环,但这也不起作用。

你在 if 语句中的条件检查是错误的。它是 nchar(test) == 4,而不是 nchar(test == 4)

但是 stringr 中的 str_pad 函数是解决问题的更简洁的方法。首先,我用零填充到 5 位数字,然后在每个数字上粘贴一个“19”。

test2 <- str_pad(test, 5, 'left', pad = '0')
test3 <- paste0('19', test2)
test3
[1] "1900001" "1900023" "1900302" "1902004"