2

保証された数のレベルが返されるカットをしたいと思います。したがって、累積パーセンテージの任意のベクトルを取得し、十分位数にカットしたいと思います。私はカットを使用してみましたが、ほとんどの状況でうまく機能しますが、パーセンテージが大きい十分位数がある場合、必要な数の一意のカット (10) を返すことができません。のカット数は 10 であることが保証されていますか?

含まれている例では、十分位数 7 の発生はありません。

> (x <- c(0.04,0.1,0.22,0.24,0.26,0.3,0.35,0.52,0.62,0.66,0.68,0.69,0.76,0.82,1.41,6.19,9.05,18.34,19.85,20.5,20.96,31.85,34.33,36.05,36.32,43.56,44.19,53.33,58.03,72.46,73.4,77.71,78.81,79.88,84.31,90.07,92.69,99.14,99.95))
 [1]  0.04  0.10  0.22  0.24  0.26  0.30  0.35  0.52  0.62  0.66  0.68  0.69  0.76  0.82  1.41  6.19  9.05 18.34 19.85 20.50 20.96 31.85 34.33
[24] 36.05 36.32 43.56 44.19 53.33 58.03 72.46 73.40 77.71 78.81 79.88 84.31 90.07 92.69 99.14 99.95
> (cut(x,seq(0,max(x),max(x)/10),labels=FALSE))
 [1]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  2  2  3  3  4  4  4  4  5  5  6  6  8  8  8  8  8  9 10 10 10 10
> (as.integer(cut2(x,seq(0,max(x),max(x)/10))))
 [1]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  2  2  3  3  4  4  4  4  5  5  6  6  8  8  8  8  8  9 10 10 10 10
> (findInterval(x,seq(0,max(x),max(x)/10),rightmost.closed=TRUE,all.inside=TRUE))
 [1]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  2  2  3  3  4  4  4  4  5  5  6  6  8  8  8  8  8  9 10 10 10 10

ほぼ同じサイズの間隔を 10 個取得したいのですが、10 個を確実に取得できるようにサイズ設定されています。cut et al は、この例で 9 個のビンを提供しています。10 個が必要です。したがって、それを認識するアルゴリズムを探しています。 [58.03,72.46],73.4 の間の切れ目は大きいです。ビン 6、8、8 に割り当てる代わりに、これらのケースをビン 6、7、8 に割り当てます。

4

4 に答える 4

4
xx <- cut(x, breaks=quantile(x, (1:10)/10, na.rm=TRUE) )
table(xx)
#------------------------
    xx
(0.256,0.58] (0.58,0.718] (0.718,6.76]  (6.76,20.5] 
           4            4            4            4 
 (20.5,35.7]  (35.7,49.7]  (49.7,75.1]  (75.1,85.5] 
           3            4            4            4 
  (85.5,100] 
           4 
于 2012-06-22T03:20:35.940 に答える
2
numBins = 10
cut(x, breaks = seq(from = min(x), to = max(x), length.out = numBins+1))

出力:

...
...
...
10 Levels: (0.04,10] (10,20] (20,30] (30,40] (40,50] (50,60] ... (90,100]

これにより、ほぼ等間隔の 10 個のビンが作成されます。numBins変数を変更すると、ほぼ等間隔の任意の数のビンを取得できることに注意してください。

于 2014-09-06T20:39:17.390 に答える
1

何が必要なのかよくわかりませんが、 を削除しlabels=FALSEて使用tableしてデータの頻度表を作成すると、必要な数のカテゴリが得られます。

> table(cut(x, breaks=seq(0, 100, 10)))

(0,10]  (10,20]  (20,30]  (30,40]  (40,50]  (50,60]  (60,70]  (70,80]  (80,90] (90,100] 
   17        2        2        4        2        2        0        5        1        4

7 番目のカテゴリ にはデータがないことに注意してください(60,70]

于 2012-06-22T02:45:55.363 に答える
-1

あなたが解決しようとしている問題は何ですか?分位数が必要ない場合、カットポイントはほぼ任意であるため、元のデータセットから置き換えることなく、サンプリングすることで10個のビンを簡単に作成できます。それはばかげた方法だと思いますが、要点を述べたいと思います。あなたは道に迷っているかもしれませんが、ゴミ箱で何をしようとしているのか説明していないのでわかりません。たとえば、1つのビンにコンテンツがないほど悪いのはなぜですか?

于 2012-06-22T11:37:53.637 に答える