2011-10-31 9 views
3

謝罪はこれ以上味付けされたRユーザーが知っているものですが、私はこれに遭遇し、適切な使用法について質問したいと思っていました。Rで変数をグループ化するためにplyrとddplyではなくas.factorを使用しますか?

as.factorを使用すると、変数の範囲を分類できるようです。だから、観測値をある範囲にグループ化することができました。たとえば、ユーザーの訪問を見ていたら、if/thenステートメントを作成して、ユーザーが訪問した範囲でビンにしてから、そのグループに基づいて要約統計情報を取得できます。ここで

は、私がこれを知ったのリンクは次のとおりです。今http://programming-r-pro-bro.blogspot.com/2011/10/modelling-with-r-part-2.html

、この関数はplyrddplyを使用してデータをグループ化するよりも簡単に見えますが、それはXの数に変数を壊すのに十分強力であることを見ていませんビンの数(例えば十分の一の場合10) - あなたはそれを自分で行う必要があります。

これは私の質問につながります。データをグループ化するために他のものよりも優れているのですか、またはこのようなグループ化に取り組むには多くの方法がありますか?私はcutは、このためのより良いツールだと思います

おかげ

+2

'as.factor'は、単に文字ベクトルを要素に変換するだけで、単独では解析を行いません。 'ddply'は' plyr'によって提供されるスイート内の強力なツールの1つです。 'as.factor'と' ddply'を比較するのは、ボールベアリングとギヤボックスを比較するのと少し違っています。 – Andrie

+2

'?cut'を見てみてください。また、http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-exampleを見てみたいかもしれません。あなたがしたいことの小さな例では、人々は簡単にチャイムインし、簡単なやり方をあなたに教えてください。 'cut()'もその一つです。 –

+1

申し訳ありません@ジョリス、私は本当に人々が答える前に質問を改善する必要があります。 – Aaron

答えて

8

。いくつかのサンプルデータで

set.seed(123) 
age <- round(runif(10,20,50)) 

これは私がやるだろうと何である:

> cut(age, c(0,30,40,Inf)) 
[1] (0,30] (40,Inf] (30,40] (40,Inf] (40,Inf] (0,30] (30,40] (40,Inf] 
[9] (30,40] (30,40] 
Levels: (0,30] (30,40] (40,Inf] 

必要に応じて、手動で因子のラベルを設定:

> cut(age, c(0,30,40,Inf), labels=c('0-30', '31-40', '40+')) 
[1] 0-30 40+ 31-40 40+ 40+ 0-30 31-40 40+ 31-40 31-40 
Levels: 0-30 31-40 40+ 

を対比するために、リンク先のページでは次のように表示されます:

> as.factor(ifelse(age<=30, '0-30', ifelse(age <= 40, '30-40', '40+'))) 
[1] 0-30 40+ 30-40 40+ 40+ 0-30 30-40 40+ 30-40 30-40 
Levels: 0-30 30-40 40+ 
+1

'cut'はリンクされたページに描かれたifelseアプローチよりもはるかに優れています。 'cut'のinclude.lowest引数に注意してください。 –

+0

提案していただきありがとうございます。なぜこれがおそらくそれにアプローチするより良い方法であるのか分かります。 – mikebmassey

関連する問題