2012-09-10 10 views
9

私はこのようになりますベクトルがあります。Rでは、連続変数からバイナリファクタ変数を作成するには、カスタムブレークを使用しますか?

dataset<-c(4,7,9,1,10,15,18,19,3,16,10,16,12,22,2,23,16,17) 

私はIビンカスタムブレークによる連続データセット4つのダミーカテゴリを作成したいと考えています。例えば、1:4,5:9,10:17,18:23である。

出力ダミーカテゴリが元の連続ベクトル(ここでは18)と同じ長さを有するであろうが、現在各ビニングダミー変数はちょうど1または0

答えて

16

使用cutを含むであろう:

data.frame(dataset, bin=cut(dataset, c(1,4,9,17,23), include.lowest=TRUE)) 
+1

OPはを求めたものですダミー変数()にcut' 'から取得するには、' model.matrix(〜ビン-1、データを試してみてください=データセット) ' –

7

私はジョシュアに同意します。cutは、この仕事のためにほとんどの人が考えると思います。私はそのデフォルトを好むことは起こりません。左閉じた間隔を持つことを好みます。cutでこれを正しく設定するのは軽微な苦痛です(幸いにも、私の弱い脳にとって、フランク・ハレルはcut2第3の選択肢は、findIntervalを使用することです。これは、結果を別の抽出や選択プロセスのインデックスとして使用する場合に特に適しています。その結果は、おおよそas.numericを適用した場合に得られる結果になります。

require(Hmisc) 
cut2(dataset, c(1,4,9,17,23)) 
[1] [ 4, 9) [ 4, 9) [ 9,17) [ 1, 4) [ 9,17) [ 9,17) [17,23] [17,23] [ 1, 4) [ 9,17) 
[11] [ 9,17) [ 9,17) [ 9,17) [17,23] [ 1, 4) [17,23] [ 9,17) [17,23] 

findIntervalあなたがW最大を交換しない限り、余分な間隔を形成するために、閉鎖端として上限を使用することに注意してください:cutの結果にi番目Inf、Rの無限の予約語)

findInterval(dataset, c(c(1,4,9,17,23))) 
[1] 2 2 3 1 3 3 4 4 1 3 3 3 3 4 1 5 3 4 
as.numeric(cut(dataset, c(1,4,9,17,Inf), include.lowest=TRUE)) 
[1] 1 2 2 1 3 3 4 4 1 3 3 3 3 4 1 4 3 3 
as.numeric(cut(dataset, c(1,4,9,17,23), include.lowest=TRUE)) 
[1] 1 2 2 1 3 3 4 4 1 3 3 3 3 4 1 4 3 3 
関連する問題