web-dev-qa-db-ja.com

先行ゼロを使用して、数値を固定幅としてフォーマットします

次のコード

a <- seq(1,101,25)
b <- paste("name", 1:length(a), sep = "_")

この出力を生成します:

"name_1"  "name_26"  "name_51"  "name_76"  "name_101"

すべての値の幅を同じにしたいので、次のように値をゼロで埋めることができます。

"name_001"  "name_026"  "name_051"  "name_076"  "name_101"

どうすれば処理できますか?

(この質問は this one に関連しています。)

124
ahs85

これにはいくつかの解決策があります。

それらの1つはsprintfを使用することです。これは、文字列に埋め込まれたCスタイルのフォーマットコードを使用して、それに渡される他の引数のフォーマットを示します。たとえば、フォーマットコード%3dは、数値を幅3の整数としてフォーマットすることを意味します。

a <- seq(1,101,25)
sprintf("name_%03d", a)
[1] "name_001" "name_026" "name_051" "name_076" "name_101"

もう1つはformatCpasteです。

paste("name", formatC(a, width=3, flag="0"), sep="_")
[1] "name_001" "name_026" "name_051" "name_076" "name_101"
211
Andrie