require(bit64)
a = c(500184833384,1803618000152,25053117000164)
b = as.integer64(a)
sprintf("%014.0f" ,a) # returns what I want/expected
# "00500184833384" "01803618000152" "25053117000164"
sprintf("%014.0f" ,b) # I don't understand this behavior
# "00000000000000" "00000000000000" "00000000000000"
我使用fread
包中的data.table
将数据导入R
。某些字段会自动读取为integer64
个对象。我正在尝试格式化这些字段。特别是,我希望它们以固定宽度打印,必要时在左边填充零。我正在尝试使用sprintf
;我也尝试了format
,它似乎有integer64
个对象的特定方法,但没有运气。
如何格式化类integer64
的对象?特别是,如何打印具有固定宽度的对象,必要时在左侧填充零?
答案 0 :(得分:0)
使用dput
查看对象通常很有用:
> dput(b)
structure(c(2.47124142745862e-312, 8.91105692095995e-312, 1.23778844310223e-310
), class = "integer64")
所以内部他们只是非常小的数字。
> cat(b)
2.471241e-312 8.911057e-312 1.237788e-310
但他们有一种印刷方法:
> print(b)
integer64
[1] 500184833384 1803618000152 25053117000164
> sprintf("%014.0f" , print(b) )
integer64
[1] 500184833384 1803618000152 25053117000164
[1] "00000000000000" "00000000000000" "00000000000000"
咦?好吧,print函数给出了最好的尝试,但是将原始值作为数字类对象发送到sprintf。
> sprintf("%014.0f" , as.character(b) )
Error in sprintf("%014.0f", as.character(b)) :
invalid format '%014.0f'; use format %s for character objects
> sprintf("%014.0s" , as.character(b) )
[1] "00000000000000" "00000000000000" "00000000000000"
螺母。需要删除字符类参数的小数点格式:
> sprintf("%014s" , as.character(b) )
[1] "00500184833384" "01803618000152" "25053117000164"