私は大きなものを持っていますdata.frame
(190万レコード、20列)。列の1つは、異なる長さの桁の値を持つ因数列です(異なる文字数/桁、たとえば567839、234324324、3243211など)。注:これらは数値コードであり、実際の値ではなく、異なる文字だけである場合もあります。この例の長さ。
ここで、桁数が13未満の場合に因子がゼロより前になるように、因子を13桁の因子に変換したいと思います。
例:
Old factor Length New factor
432543532532 12 0432543532532
3285087250932 13 3285087250932
464577534 9 0000464577534
2225324324324 13 2225324324324
864235325264 12 0864235325264
さまざまなアプローチを試しましたが、今は行き詰まっています。問題は、因子の長さがデータセット全体で異なることです。
例を挙げて、次のことを試しました。
data.frame
問題を特定するために、コードを実行する3つの異なる列を使用して作成します。
> df.test <- as.data.frame(cbind(c("432543532532", "3285087250932", "464577534", "2225324324324", "864235325264"), c("3285087250932", "132543532532", "464577534", "2225324324324", "864235325264"), c("164577534", "3285087250932", "432543532532", "2225324324324", "864235325264")))
> df.test
V1 V2 V3
1 432543532532 3285087250932 164577534
2 3285087250932 132543532532 3285087250932
3 464577534 464577534 432543532532
4 2225324324324 2225324324324 2225324324324
5 864235325264 864235325264 864235325264
> levels(df.test$V1) <- paste(substr("0000000000000", 0, 13 - nchar(as.character(levels(df.test$V1)))), levels(df.test$V1), sep = '')
> levels(df.test$V2) <- paste(substr("0000000000000", 0, 13 - nchar(as.character(levels(df.test$V2)))), levels(df.test$V2), sep = '')
> levels(df.test$V3) <- paste(substr("0000000000000", 0, 13 - nchar(as.character(levels(df.test$V3)))), levels(df.test$V3), sep = '')
> df.test
V1 V2 V3
1 432543532532 03285087250932 0000164577534
2 3285087250932 0132543532532 00003285087250932
3 464577534 0464577534 0000432543532532
4 2225324324324 02225324324324 00002225324324324
5 864235325264 0864235325264 0000864235325264
問題は、コードnchar(as.character(levels(df.test$V1)))
がベクトルの長さではdf.test$V1
なく、1つの値のみを使用することです。因子の最初のレベルの長さ(アルファベット/昇順)。そして、それはすべてのレコードで必要な先行ゼロの数を実行します。したがって、ベクトルコードはありません!
注:「nchar」コードを個別に実行すると、結果としてすべてのレコードの長さのベクトルが得られるため、機能するはずだと思いました...
> nchar(as.character(levels(df.test$V1)))
[1] 13 13 12 9 12
> nchar(as.character(levels(df.test$V2)))
[1] 13 14 14 10 13
> nchar(as.character(levels(df.test$V3)))
[1] 13 17 17 16 16
nchar(as.character(levels(df.test$V1)))
ベクトル演算子として実行されないのはなぜですか?誰かが私のコードを変更する方法を教えてもらえますか?そうすれば正しい結果が得られますか?
前もって感謝します!
NB。実際の場合、この調整を実行する必要があるのは、の1つの列だけであることに注意してくださいdata.frame
。