2

列を含むデータ フレームがありReferenceます。これは 10 桁の数字で、ゼロから始めることができます。Rにインポートすると、先頭のゼロが消えます。これを追加したいと思います.

と を使用してみsprintfましformatCたが、それぞれに異なる問題があります。

DF=data.frame(Reference=c(102030405,2567894562,235648759), Data=c(10,20,30))

私が得る出力は次のとおりです。

> sprintf('%010d', DF$Reference)
[1] "0102030405" "        NA" "0235648759"
Warning message:
In sprintf("%010d", DF$Reference) : NAs introduced by coercion
> formatC(DF$Reference, width=10, flag="0")
[1] "001.02e+08" "02.568e+09" "02.356e+08"

数値がすでに 10 桁の場合、最初の出力は NA を返し、2 番目の出力は結果を標準形式で格納します。

私が必要とするのは:

[1]  0102030405 2567894562  0235648759
4

2 に答える 2

1

formatC

使用できます

formatC(DF$Reference, digits = 0,  width = 10, format ="f", flag="0")
# [1] "0102030405" "2567894562" "0235648759"

スプリント

dinの使用はsprintf、値が整数であることを意味します (または で変換する必要がありますas.integer())。 help(integer)次のように説明します。

「表現可能な整数の範囲は、約 +/-2*10^9 に制限されています。倍精度浮動小数点数は、はるかに大きな整数を正確に保持できます。」

as.integer(2567894562)それが を返す理由NAです。

別の回避策は、で文字形式を使用することsですsprintf

sprintf('%010s',DF$Reference)
# [1] " 102030405" "2567894562" " 235648759"

しかし、これは先行ゼロの代わりにスペースを与えます。gsub()スペースをゼロに置き換えることでゼロを追加できます。

gsub(" ","0",sprintf('%010s',DF$Reference))
# [1] "0102030405" "2567894562" "0235648759"
于 2016-03-07T13:46:52.873 に答える