2016-04-06 10 views
0

先行ゼロ(無効倍引数)を作成するために、Rの順にdata.tableとの組み合わせで担当者(0、X)を取得:私は例として、次のdata.tableを作成

dt <- data.table(x = c(1, 12, 200, 1600)) 
dt[, y := " "] 

私の目標はにありますy列にx値を先行ゼロで拡張し、yの各エントリが4桁(0001,0012、0200,1600)であるように入力します。

次のように私の考えは次のとおりです。

dt[, y := x] # fill column with original values 
dt[nchar(as.integer(x)) < 4, y := paste(paste(rep(0, 4-nchar(as.integer(x))), collapse=""), x, sep="")] 

このコマンドはX未満4桁で構成されているかどうかを確認することになって、そして、もしそうであれば、ゼロの必要な数を生成し、でそれらを貼り付けています文字列の始まり。ただし、この文を実行すると、メッセージ「rep(0、4-nchar(as.integer(x))のエラー):無効な 'times'引数」が返されます。

私は、次のコマンドが正常に動作するので、私の基本的な考え方が正しいことを知っている:

dt[nchar(as.integer(x)) < 4, y := paste(paste(rep(0, 4), collapse=""), x, sep="")] 

ここで、私は単純に(この場合は4)乱数によって担当者()の第2引数を置き換え。

したがって、rep()は明らかにxで作成された列参照を理解する上でいくつかの問題があります。他の関数(as.numeric()など)ではこれに問題はありません。

ありがとうございました!

+0

はsprintfのに見て。 – Heroka

答えて

0

私は問題がrep()に長さ> 1のベクトルを与えていると思います。

おそらく使用できるフォーマットはありますか?以下に、回避策を段階的に示します。

dt <- data.frame(x = c(1, 12, 200, 1600)) 

dt$times_to_rep<-4-nchar(dt$x) 
dt$power_of_ten<-10^dt$times_to_rep 
dt$zeros<-substring(dt$power_of_ten,2,nchar(dt$power_of_ten)) 
dt$y<-paste0(dt$zeros, dt$x, sep = '') 
1

日科技連formatCを使用します。

library(data.table) 
dt <- data.table(x = c(1, 12, 200, 1600)) 
dt[, y := formatC(x, width = 6, format = "d", flag = "0")] # 
dt 

     x  y 
1: 1 000001 
2: 12 000012 
3: 200 000200 
4: 1600 001600