2017-10-12 9 views
-2

私はRの新人です。私はかなりの時間からこの問題に直面してきました。 「dplyr」パッケージを使用してデシルまたは四分位を作成しようとするたびに、デシルがより少ないグループにマージされます。 Like 私は6、4、時には3になるのに対し、私は10の異なるグループが欲しいです。 小さいデシルをグループ化/マージしようとします。 しかし、私はこの問題を避けたいです。助けてください! ありがとうございます!RのDecilesの自動マージを避けるには?

コードは次のとおりです。ここで

mydata <- data.frame(col1= c(0,00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,3,12,5,65,23,65984,21,5469,321,6,100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,5233,18000)) 

DecLocations <- quantile(mydata$col1, probs = c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9)) 
mydata$decile <- findInterval(mydata$col1,c(-Inf,DecLocations, Inf)) 

require(dplyr) 
mydata$decile<-factor(mydata$decile) 
decile_grp<-group_by(mydata,decile) 
decile_summ_test<-summarize(decile_grp, total_cnt=sum(col1)) 
decile_summ_test<-arrange(decile_summ_test, desc(decile)) 
View(decile_summ_test) 

Rが小さい十分位数をマージするので、私は唯一の最初の6個の十分位数を取得しています。これは私がここで避けようとしているものです。私は実際に小さな数字を持っていても、すべて10デシールを得ることを期待しています。

+0

最小限の再現可能な例? – CPak

+1

問題を説明し、出力として期待する簡単なデータ例を提供する必要があります。コメントにコードを追加しないでください。むしろ、オリジナルの投稿をあなたのコード/例/更新で編集してください。 – CPak

+0

@CPakはこれを今行った! – PerryThePlatipus

答えて

0

あなたDecLocationsベクトルを見て持っている場合は、Rは、すべての十分位数を作成していることがわかりますが、あなたは下の十分位数がfindInterval関数の定義が原因で廃棄されたブレークポイントとして十分位数でfindInterval関数を適用する場合(?findIntervalを参照してくださいヘルプファイルの)

パート:

説明

vec内の非減少ブレークポイントのベクトルが与えられると、xの各要素を含む間隔を見つける。 x [i [j]]≦x [j] < v [i [j] + 1]ここで、v [0]:= - Infの各インデックスjについて、i < - findInterval(x、 v [N + 1]:= + Inf、およびN < - 長さ(v)。 2つの境界では、オプションの引数rightmost.closedとall.insideに応じて、返されるインデックスは1だけ異なる場合があります。

ここで、この関数が最大値を検出することがわかります。 v [i [j]]≦x [j] < v [i [j] + 1]となるような、それがデシルが落とされた理由です。

ベクターにすべてのデシルを表示したい場合は、下のデシルにいくつかの(ランダム?)方法で0を割り当てる必要があります。

DecLocations <- quantile(mydata$col1, probs = c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9)) 
DecLocations 
10% 20% 30% 40% 50% 60% 70% 80% 90% 
    0 0 0 0 5 65 400 900 1400 

mydata$decile <- findInterval(mydata$col1,c(-Inf,DecLocations, Inf)) 
head(mydata) 
    col1 decile 
1 0  5 
2 0  5 
3 0  5 
4 0  5 
5 0  5 
6 0  5 
関連する問題