添加或保留前导零而不转换为字符格式

时间:2013-09-26 17:06:29

标签: r

是否可以在不将结果转换为字符的情况下向数字添加或保留一个或多个前导零?我找到的用于添加前导零的每个解决方案都会返回一个字符串,包括:pasteformatCformatsprintf

例如,x可以是0123还是00123等,而不是123仍然是数字?

x <- 0123

修改

这不是必需的。我刚刚玩了下面的代码,最后两行给出了错误的答案。我只是想,如果我能用数字格式得到前导零,那么获得正确答案会更容易。

a7   = c(1,1,1,0); b7=c(0,1,1,1);  # 4
a77  = '1110'    ; b77='0111'   ;  # 4
a777 =  1110     ; b777=0111    ;  # 4

length(b7[(b7 %in% intersect(a7,b7))])

R - count matches between characters of one string and another, no replacement

keyword <- unlist(strsplit(a77, ''))
text    <- unlist(strsplit(b77, ''))
sum(!is.na(pmatch(keyword, text)))

ab7 <- read.fwf(file = textConnection(as.character(rbind(a777, b777))), widths = c(1,1,1,1), colClasses = rep("character", 2))
length(ab7[2,][(ab7[2,] %in% intersect(ab7[1,],ab7[2,]))])

2 个答案:

答案 0 :(得分:8)

你没有正确思考“数字”是什么。编程语言存储内部表示,该表示保持机器限制的完全精度。您显然担心打印到屏幕或控制台的内容。根据定义,这些数字字符是字符串元素,也就是说,ASCII解码器(或等效字符)处理几个字节以确定在屏幕上绘制什么。 x“是什么,”在总统见证中愉快地得出,取决于你对“是”的定义。

答案 1 :(得分:6)

您总是可以创建自己的对象类,其中有一个插槽用于数字的值(但如果它存储为数字,那么我们看到的123实际上将存储为二进制值,如01111011(虽然可能有更多前导0的))和另一个槽或属性的前导0的数量或有效数字的数量。然后你可以编写如何处理数字的方法(以及对前导0,sig数字等有什么影响。)

然后打印方法可以确保使用前导零打印它,同时将内部值保持为数字。

但是在大​​多数情况下这似乎有点矫枉过正(尽管我知道有些字段在指示有效位数方面做了大量工作,因此前导0可能很重要)。使用您已经了解的转换为字符方法可能更简单,但只是以一种看起来不像数字的方式进行打印,请参阅catprint函数选项。