2016-08-18 1 views
2

パーセンテージ値を生成する関数をプログラムしました。値をデータフレームに渡すと、書式設定は失われます。例えば99.90%は0.9990になるでしょう。これを説明するためにいくつかの簡単なコード(1列目は、私はすべての列に割合を望んでいないことを示すためである):パーセンテージ値をデータフレームに渡すときのフォーマットの割合を保持する

DT = data.frame(matrix(0,nrow=1,ncol=5), stringsAsFactors = FALSE) 
DT[1,1] = 100 
DT[1,2:5] = percent(c(0.9999,0.4567,0.3256,0.7777)) 

DT 

X1  X2  X3  X4  X5 
1 100 0.9999 0.4567 0.3256 0.7777 

私はパーセンテージの書式を維持するために、私はデータフレームをフォーマットする必要があり、ことに気づきましたあらかじめ。

DT[,2] = percent(DT[,2]) 
DT[,3] = percent(DT[,3]) 
... 

をしかし、それは少し面倒です。しかし、私はそうすることができる列

によってカラムには、これは動作します。残念ながら、歩留まり以下の両方の線と同じエラー

DT[,c(2,3,4,5)] = percent(DT[,c(2,3,4,5)]) 
DT[,2:5] = percent(DT[,2:5]) 

Error in UseMethod("percent") : 
no applicable method for 'percent' applied to an object of class "data.frame" 

また、これは動作しません:

  • 維持する方法は:

    DT[,2:5] = apply(DT[,2:5],MARGIN = 2 ,FUN=percent) 
    

    従って私はそこにあるかどうかを疑問に思いましたデータフレームに渡されたときの値のパーセント書式。後者の場合、書式がどのようなものであるかを事前に指定していない場合。;または、

  • データフレームの多数の列にパーセント形式を割り当てる効率的な方法。
+5

私のシステムでは、最初のコードブロックが '100 100.0%45.7%32.6%77.8% 'になります(つまり、パーセント形式はそのままです)。あなたはどのパーセント()を使っていますか?私は 'scales :: percent()'を使いました。 – hrbrmstr

+0

このパッケージは 'percent()'関数がどこから来たものかと思っていたので、 'library(scales)'を含むように投稿を編集しました。 @hrbrmstrによるコメントの読み方私は、その名前の他の関数があるかもしれないことを認識しています。使用したライブラリを指定してください。 – RHertel

+0

私はformattableからパーセント()を使用していました。スケールをスケールに変更すると、目的の結果が得られます。ありがとう! – koteletje

答えて

0

@hrbrmstrが指摘したように、私はscales::percent()を使用してコードを動作させる必要があります。 2桁の数字を取得するには、scales::percent(round(x,4))またはformattable::percent(x, 2)のいずれかを入力します。 namespacescalesまたはformattable)を指定すると、マスクされたパッケージの関数を使用できます。

関連する問題