本文介绍了用前导零填充数字列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
过去几个小时我一直在研究这个问题.我曾尝试使用 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更多推荐
用前导零填充数字列
发布评论