нули исчезают при использовании str_c () - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблема, которую я просто не понимаю.

Я хотел бы собрать строки в зависимости от количества символов:

вектор 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 Loop, используя ту же логику, но она тоже не работает.

1 Ответ

0 голосов
/ 06 декабря 2018

Вы проверяете условие в операторах 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"
...