填充前导零的数字列

时间:2015-04-14 19:00:09

标签: r number-formatting

过去几个小时我一直在研究这个问题。我尝试过使用sprintf,但它会将列更改为字符。我想做的就是有一个固定宽度的数字列,用零填充。

2 个答案:

答案 0 :(得分:5)

如果您愿意使用自定义类,则可以编写执行此操作的打印方法。创建一个数据框,并为其提供一个自定义类:

DF <- data.frame(a=letters[1:10], b=sample(c(1, 10, 100), 10, rep=T), c=sample(c(1, 10, 100), 10, rep=T))
class(DF) <- c("my_df", class(DF))

编写一个使用@BenBolker格式的打印方法:

print.my_df <- function(x, ...) {
  num.cols <- sapply(x, is.numeric)
  x[num.cols] <- lapply(x[num.cols], sprintf, fmt="%04d")
  NextMethod()
}

然后:

DF

产地:

   a    b    c
1  a 0100 0100
2  b 0010 0001
3  c 0001 0010
4  d 0001 0100
5  e 0001 0001
6  f 0001 0001
7  g 0001 0001
8  h 0001 0100
9  i 0001 0100
10 j 0001 0001

您仍然可以使用相同的方式使用数据框,因为这些数字仅在打印时进行转换。

> sum(DF$b)
[1] 118

答案 1 :(得分:4)

如果您提供更多背景信息,我们可以帮助您解决最终(而非近端)问题,例如:如果你需要这种格式的输出但没有引号:

> cat(sprintf("%04d",5),"\n")
0005 
## or
> print(sprintf("%04d",5),quote=FALSE)
[1] 0005

write.csv(...,quote=FALSE)也可能有帮助

相关问题