用前导零填充数字列 [英] pad numeric column with leading zeros

查看:66
本文介绍了用前导零填充数字列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've been looking into this for the past few hours. I have tried using sprintf but it changes the column to character. All I want to do is to have a fixed-width numeric column, padded with zeros.

推荐答案

如果您愿意使用自定义类,您可以编写执行此操作的打印方法.制作一个数据框,并给它一个自定义类:

If you're willing to use a custom class, you can write a print method that does this. Make a data frame, and give it a custom class:

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 格式的打印方法:

Write a print method that uses @BenBolker's formatting:

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

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

You can still use the data frame the same way since the numbers are only converted when they are printed.

> sum(DF$b)
[1] 118

这篇关于用前导零填充数字列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆