使用 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"
我遇到了一个我不明白的问题。
我想把字符串放在一起,具体取决于字符数:
矢量 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"