2012-01-04 6 views
0

で作成するこれは多少の質問ではありませんが、私はフォーラム を見て、私がしようとしていることを検索する方法を見つけることができませんでした。 私はトレーニングセットを持っており、カテゴリ変数のレベル数を減らす方法を見つけようとしています (下の例ではカテゴリが状態です)。私は州をレベルの平均または率にマップしたいと思っています。 私のトレーニングセットは、データフレームに入力した後、次のようになります。変数を基にした集計列をR

state class mean 
1  CA  1 0 
2  AZ  1 0 
3  NY  0 0 
4  CA  0 0 
5  NY  0 0 
6  AZ  0 0 
7  AZ  1 0 
8  AZ  0 0 
9  CA  0 0 
10  VA  1 0 

私はクラス変数に基づいて、第1のカラム(状態)の平均値であることを私のデータフレームにおける3番目の列をしたいと思います。 CA行の平均値は0.333 ... になりますので、平均列を状態列の代わりに使用することができます Rに明示的なループを記述することなくこれを行う良い方法がありますか?

トレーニングセットに含まれていない場合は、新しいレベル(新しい状態の例)をマッピングするにはどうすればよいですか? Rでのアプローチへのリンクは、非常に高く評価されます。

答えて

2

これは実際にave関数が設計したものです。本当に、カテゴリによって任意の機能的な結果を構築するために使用されるが、そのデフォルトのfuncitonは、その名の平均値である、すなわち、ave-(激怒)することができます。

dfrm$mean <- with(dfrm, ave(class, state)) #FUN=mean is the default "setting" 
+0

私は外部のパッケージを使用する必要がないので、私はこの答えを受け入れました。あなたは答えを逆にして授業をしてもらえますか?例:with(dfrm、ave(class、state)) – ak3nat0n

1
library(plyr) 
    join(data,ddply(data,.(state),summarise,mean=mean(class)),by=("state"),type="left") 
+0

私はそれだけで 'ddply'を使用する方が簡単かもしれないと思うと、 '変換'(私は正しくOPを理解している場合)。 – joran

+0

実際に私は要約をしましたが、元のデータに戻しました。私はddplyステートメントだけで十分だと思っていますが、OPはそれを元のデータの一部として扱います。 – Maiasaura

関連する問題