零使用str_c()

时间:2018-12-06 17:36:16

标签: r string stringr

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

我想根据字符数来组合字符串:

向量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循环,但这也不起作用。

1 个答案:

答案 0 :(得分:2)

您正在检查if语句是否错误。其nchar(test) == 4,而不是nchar(test == 4)

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

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