我遇到了一个我不明白的问题。
我想根据字符数来组合字符串:
向量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循环,但这也不起作用。
答案 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"