短いバージョン:useformatC
またはsprintf
。
長いバージョン:
先行ゼロの追加など、数値のフォーマットに使用できる関数がいくつかあります。どちらが最適かは、他にどのようなフォーマットを実行するかによって異なります。
質問の例は、すべての値が最初から同じ桁数であるため非常に簡単です。したがって、10の累乗を幅8にするというより難しい例も試してみましょう。
anim <- 25499:25504
x <- 10 ^ (0:5)
paste
(そしてそれは変形ですpaste0
)あなたが出くわす最初の文字列操作関数であることがよくあります。これらは実際には数値を操作するようには設計されていませんが、そのために使用できます。常に単一のゼロを付加する必要がある単純なケースでpaste0
は、が最善の解決策です。
paste0("0", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
数字に可変の桁数がある場合は、追加するゼロの数を手動で計算する必要があります。これは、病的な好奇心からのみ行う必要があるほど恐ろしいことです。
str_pad
fromstringr
は、と同様に機能しpaste
、物を埋めたいことをより明確にします。
library(stringr)
str_pad(anim, 6, pad = "0")
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
繰り返しになりますが、実際には数字で使用するように設計されていないため、難しい場合は少し考える必要があります。「幅8までゼロのパッド」と言うことができるはずですが、この出力を見てください。
str_pad(x, 8, pad = "0")
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "0001e+05"
科学的ペナルティオプションを設定して、数値が常に(科学的記数法ではなく)固定表記法を使用してフォーマットされるようにする必要があります。
library(withr)
with_options(
c(scipen = 999),
str_pad(x, 8, pad = "0")
)
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"
stri_pad
inはfromとstringi
まったく同じように機能します。str_pad
stringr
formatC
C関数へのインターフェースprintf
です。これを使用するには、その基礎となる関数のアルカナに関する知識が必要です(リンクを参照)。この場合、重要なポイントは、「整数」を表すwidth
引数と、ゼロを付加するための引数です。format
"d"
"0"
flag
formatC(anim, width = 6, format = "d", flag = "0")
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
formatC(x, width = 8, format = "d", flag = "0")
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"
これは私のお気に入りのソリューションです。幅を変更するのは簡単で、この機能は他のフォーマットを変更するのに十分強力だからです。
sprintf
同じ名前のC関数へのインターフェースです。のようformatC
ですが、構文が異なります。
sprintf("%06d", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
sprintf("%08d", x)
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"
の主な利点はsprintf
、フォーマットされた数値をテキストの長いビット内に埋め込むことができることです。
sprintf(
"Animal ID %06d was a %s.",
anim,
sample(c("lion", "tiger"), length(anim), replace = TRUE)
)
## [1] "Animal ID 025499 was a tiger." "Animal ID 025500 was a tiger."
## [3] "Animal ID 025501 was a lion." "Animal ID 025502 was a tiger."
## [5] "Animal ID 025503 was a tiger." "Animal ID 025504 was a lion."
goodsideの回答も参照してください。
完全を期すために、時々役立つ他のフォーマット関数について言及する価値がありますが、ゼロを付加する方法はありません。
format
、数値のメソッドを使用して、あらゆる種類のオブジェクトをフォーマットするためのジェネリック関数。と少し似formatC
ていますが、さらに別のインターフェイスを備えています。
prettyNum
はさらに別のフォーマット機能であり、主に手動軸目盛りラベルを作成するためのものです。これは、広範囲の数値に対して特にうまく機能します。
scales
パッケージにはpercent
、などのいくつかの機能がdate_format
ありdollar
、特殊なフォーマットタイプ用です。