[解決済み] 先頭にゼロを付けるには?
質問事項
次のようなデータセットがあります。
anim <- c(25499,25500,25501,25502,25503,25504)
sex <- c(1,2,2,1,2,1)
wt <- c(0.8,1.2,1.0,2.0,1.8,1.4)
data <- data.frame(anim,sex,wt)
data
anim sex wt anim2
1 25499 1 0.8 2
2 25500 2 1.2 2
3 25501 2 1.0 2
4 25502 1 2.0 2
5 25503 2 1.8 2
6 25504 1 1.4 2
各動物IDの前に0を追加してほしい。
data
anim sex wt anim2
1 025499 1 0.8 2
2 025500 2 1.2 2
3 025501 2 1.0 2
4 025502 1 2.0 2
5 025503 2 1.8 2
6 025504 1 1.4 2
また、動物IDの前に2つまたは3つのゼロを追加する必要がある場合はどうすればよいでしょうか。
どのように解決するのですか?
ロングバージョンです。
数字の書式設定には、先頭のゼロを加えるなど、いくつかの関数が用意されています。 どれが最適かは、他にどのような書式を使いたいかによります。
設問の例は、そもそもすべての値が同じ桁数なので、とても簡単です。では、もっと難しい、10の累乗を8にもする例でやってみましょう。
anim <- 25499:25504
x <- 10 ^ (0:5)
paste
(およびその変形である
paste0
は、文字列操作の関数として最初に目にすることが多いものです。 この関数は数字を操作するために作られたものではありませんが、数字操作に使うこともできます。 常にゼロを1つ前置しなければならないような単純な場合、次のようになります。
paste0
が最適解です。
paste0("0", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
数字の桁数が可変の場合、いくつのゼロを前置するのか手動で計算しなければなりません。これは恐ろしいことなので、病的な好奇心からしかやってはいけないことです。
str_pad
から
stringr
と同じように動作します。
paste
ということをより明確にすることができます。
library(stringr)
str_pad(anim, 6, pad = "0")
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
ここでも、数字を使うことを想定していないため、難しいケースは少し考える必要があります。 本来なら、quot;pad with zeroes to width 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
で
stringi
と全く同じ動作をします。
str_pad
から
stringr
.
formatC
は、C言語の関数
printf
. これを使うには、その基礎となる関数の奥義についてある程度の知識が必要です(リンク参照)。 この場合、重要なポイントは
width
引数を指定します。
format
存在
"d"
は整数を表し、quot;integer"は
"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
は、専門的なフォーマットの種類を表します。
関連
-
[解決済み】scale_color_manual()が動作しない件
-
[解決済み】Rの整数オーバーフローとは何ですか、そしてどのように起こるのですか?
-
[解決済み] Rの再現性のある優れた例題の作り方
-
[解決済み] JavaScriptでカンマを桁区切りにして数値を表示する方法
-
[解決済み] 数字を通貨文字列としてフォーマットする方法
-
[解決済み] JavaScriptで10進数から16進数へ変換する方法
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] 整数の左側にゼロを埋め込むにはどうしたらいいですか?
-
[解決済み] C# はパディングゼロで int を文字列に変換しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。Rの次元数が正しくない
-
[解決済み] Stataバージョン5-12の.dtaファイルではない
-
[解決済み】LMEモデルのレベル0、ブロック1でのバックソルブにおける特異性
-
[解決済み】 colMeans(x, na.rm = TRUE) のエラー : KNN分類では 'x' は数値でなければならない
-
[解決済み】ggplotのエラー。関数型オブジェクトのスケールを自動的に選択する方法がわかりません。
-
[解決済み】「'dimnames' [1]の長さが配列の範囲と等しくない」とはどういう意味ですか?
-
[解決済み】 lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) のエラー : 'y' の NA/NaN/Inf, あらゆる方法を試したが解決しなかった。
-
[解決済み】RでAIC中に行数が変化するのはなぜですか?そうならないようにするにはどうしたらいいですか?
-
[解決済み】エラー - replacement has [x] rows, data has [y].
-
[解決済み] 固定幅で先頭のゼロを含む数値のフォーマット【重複