使用sprintf()添加尾随零

使用sprintf()添加尾随零,r,R,必须有一个简单的方法来做到这一点,我忽略了它。但是如果我有一系列id,并且想要在未达到字符限制的地方添加尾随零。我在另一篇帖子上看到了这个解决方案,但似乎找不到链接供参考 df$id <- c(2331,29623,311,29623) 我不认为sprintf可以做到这一点,但您可以使用formatC来做到这一点 x <- 123 formatC(as.numeric(x), format = 'f', flag='0', digits = 2) [1] "123.00"

必须有一个简单的方法来做到这一点,我忽略了它。但是如果我有一系列
id
,并且想要在未达到字符限制的地方添加尾随零。我在另一篇帖子上看到了这个解决方案,但似乎找不到链接供参考

df$id <- c(2331,29623,311,29623)

我不认为
sprintf
可以做到这一点,但您可以使用
formatC
来做到这一点

x <- 123    
formatC(as.numeric(x), format = 'f', flag='0', digits = 2)
[1] "123.00"

x如评论中所述,
sprintf()
不会这样做。但是stringi包具有快速且简单的填充函数

id <- c(2331, 29623, 311, 29623)

library(stringi)
stri_pad_left(id, 5, 0)
# [1] "02331" "29623" "00311" "29623"
stri_pad_right(id, 5, 0)
# [1] "23310" "29623" "31100" "29623"

id如果我们坚持,我们可以愚弄
sprintf()
去做它不想做的事情:

# Helper function from: stackoverflow.com/a/13613183/4552295
strReverse <- function(x) sapply(lapply(strsplit(x, NULL), rev), paste, collapse="")

so_0padr <- function(x, width = 5) {
  strReverse(
    sprintf(
      "%0*d",
      width,
      as.integer(
        strReverse(
          as.character(x)
        )
      )
    )
  )
}

尾随的零使其成为不同的数字。为什么sprintf能够做到这一点?另外,您应该使用
%d
,但这对后者并不重要。您可以使用
stringi::stri_pad_right(id,5,“0”)
用尾随零填充,只需将数字乘以
sprintf(“%g”,nums*10^(5-nchar(nums))
@RichardScriven“无效格式'%05d';字符对象使用格式%s”@斯塔克,因为它是一个被读取为数字的ID,而所有ID都应该具有相同的字符数。这不起作用,因为它将0放在小数点后。我需要在小数点前填充。
gsub(“.”,“”,formatC(as.numeric(x),format='f',flag='0',digits=2),fixed=TRUE)
谢谢,我拉了
stringr
并使用了:
df$id\u测试
x <- 123    
formatC(as.numeric(x), format = 'f', flag='0', digits = 2)
[1] "123.00"
id <- c(2331, 29623, 311, 29623)

library(stringi)
stri_pad_left(id, 5, 0)
# [1] "02331" "29623" "00311" "29623"
stri_pad_right(id, 5, 0)
# [1] "23310" "29623" "31100" "29623"
# Helper function from: stackoverflow.com/a/13613183/4552295
strReverse <- function(x) sapply(lapply(strsplit(x, NULL), rev), paste, collapse="")

so_0padr <- function(x, width = 5) {
  strReverse(
    sprintf(
      "%0*d",
      width,
      as.integer(
        strReverse(
          as.character(x)
        )
      )
    )
  )
}
so_0padr(c(2331,29623,311,29623))
[1] "23310" "29623" "31100" "29623"