Tav*_*avi 3 r number-formatting
过去几个小时我一直在研究这个问题.我尝试过使用sprintf但是它将列更改为字符.我想做的就是有一个固定宽度的数字列,用零填充.
如果您愿意使用自定义类,则可以编写执行此操作的打印方法.创建一个数据框,并为其提供一个自定义类:
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))
Run Code Online (Sandbox Code Playgroud)
编写一个使用@BenBolker格式的打印方法:
print.my_df <- function(x, ...) {
num.cols <- sapply(x, is.numeric)
x[num.cols] <- lapply(x[num.cols], sprintf, fmt="%04d")
NextMethod()
}
Run Code Online (Sandbox Code Playgroud)
然后:
DF
Run Code Online (Sandbox Code Playgroud)
生产:
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
Run Code Online (Sandbox Code Playgroud)
您仍然可以使用相同的方式使用数据框,因为数字仅在打印时进行转换.
> sum(DF$b)
[1] 118
Run Code Online (Sandbox Code Playgroud)