如何仅为12位数值补零为13位,其余补至10位且不影响其他值?
解决数据库ID补零的R语言方案
原代码的问题出在两个核心点:
- 判断逻辑错误:用
x>=12是拿数值大小做判断,而非ID的位数,12位的ID数值肯定远大于12,但其他长位数的ID也会触发这个条件,完全不符合需求。 - 补零逻辑错误:false分支直接加一个0,没考虑不同位数的补零规则——10位的ID不需要补,12位的要补到13位,其余需补到10位。
正确的做法是先把数值转成字符串,通过判断字符串长度来分情况处理:
library(stringr) x <- c(102030301, 223456783, 5234567123, 916784443214) # 转成字符串后判断长度,分情况补零 result <- case_when( str_length(as.character(x)) == 12 ~ str_pad(x, 13, side = "left", pad = "0"), TRUE ~ str_pad(x, 10, side = "left", pad = "0") ) result
运行后输出:
[1] "0102030301" "0223456783" "5234567123" "0916784443214"
完全符合预期结果。
代码逻辑说明:
- 用
str_length(as.character(x))获取每个ID的实际位数 - 位数为12的ID,通过
str_pad在左侧补1个0,凑成13位 - 其他所有情况,统一在左侧补0到10位(原长度已经是10位的ID会保持不变)
内容的提问来源于stack exchange,提问作者Leonardo Vill
相关产品推荐
相关产品推荐

