前导零填充数字列
答
如果你愿意使用自定义类,你可以写,做这种打印方法。做一个数据帧,并给它一个自定义类:
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
+0
这是行之有效的。谢谢布罗迪 – maryam
答
如果您提供更多的上下文,我们可能会帮助您解决最终(而非近端)问题,例如,如果你需要输出在这种格式,但不包括引号:
> cat(sprintf("%04d",5),"\n")
0005
## or
> print(sprintf("%04d",5),quote=FALSE)
[1] 0005
write.csv(...,quote=FALSE)
可能也有帮助
如果不转换为字符类,则无法填充前导零。 – akrun
数字没有前导零。如果你想让它们以特定的方式格式化,那么你必须转换成字符格式。 – MrFlick
呃哦:(OK然后感谢yall – maryam