如何使用 sprintf 函数在字符中添加前导“0”而不是空格?

Posted

技术标签:

【中文标题】如何使用 sprintf 函数在字符中添加前导“0”而不是空格?【英文标题】:How to use sprintf function to add leading "0" instead of spaces to character? 【发布时间】:2014-06-05 15:07:25 【问题描述】:

我正在尝试使用sprintf 函数将前导“0”添加到字符,并使所有字符的长度相同。但是我得到的是领先的空间。

我的代码:

a <- c("12","123", "1234")
sprintf("%04s",a)
[1] "  12" " 123" "1234"

我想得到什么:

[1] "0012" "0123" "1234"

sprintf 手册说:“对于字符,这个零填充在某些平台上,而在其他平台上被忽略。”

我的版本: 平台 x86_64-w64-mingw32 拱 x86_64 操作系统 mingw32 系统 x86_64、mingw32 状态 专业 3 次要 1.0 2014 年 04月 第 10 天 svn 版本 65387 语言 R version.string R 版本 3.1.0 (2014-04-10) 绰号春舞

【问题讨论】:

您需要更多示例才能知道您要做什么。正如手册所说,有时这在其他系统上会被忽略。也许sprintf("%07d",125) 这个问题有帮助吗:***.com/questions/8266915/… 另见this answer 它适用于我(OSX 10.8.4 上的 R 3.0.2)。您是否尝试将字符向量转换为数值向量? @beginneR @RichardScriven 当向量的所有元素长度相同时,这可能是一个解决方案。但是,当元素具有不同的长度并且 OP 想要将所有元素转换为具有前导零的相同长度时,paste(或paste0)将无法提供所需的解决方案。 【参考方案1】:

如果你在一个只插入空格的平台上,正则表达式是你的朋友。类似的东西

foo<- gsub('^[ ]1,','0',bar)

这将用 0 替换所有前导空格。我知道可以告诉正则表达式用N 零字符替换N 空格,但我忘记了具体方法。

编辑:对于那些paste0 反对者,怎么样:

wantlength <- 12 # the desired final string size, fully zero padded
paste0( paste0(rep('0',wantlength-nchar(foo)),collapse='') ,foo)

【讨论】:

更简单一点,gsub('^ +', '0', bar)gsub('^\\s+', '0', bar) 匹配所有前导空白字符。但是可以安全地假设前导空格是字符串中唯一的空格(我们是填充数字吗?),所以我们可以gsub('\\s', '0', bar) 谢谢各位。我认为 jbaums 的函数:gsub('^\\s+', '0', bar) 解决了我的问题。

以上是关于如何使用 sprintf 函数在字符中添加前导“0”而不是空格?的主要内容,如果未能解决你的问题,请参考以下文章

R:sprintf用前导空格填充十进制数

在保持正确对齐的同时消除前导零

abap中如何去掉字符串前导0

sprintf()函数的用法

如何在php中格式化带有00前缀的数字?

如何在sprintf函数中输出百分号等特殊符号