如何使用 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”而不是空格?的主要内容,如果未能解决你的问题,请参考以下文章