2016-05-31 1 views
0

集計関数に関する以下のソースコードと同様に、ここでlist function()を使用する必要がある理由を理解できません。むしろ、これを、グループ化する必要がある1つの列を使用して置き換えることにします。なぜ私は 'train [Sales!= 0]'のような同じデータセットを2回使用するのか分かりません。 2番目のデータセットパラメータとして他のデータセットを使用するとどうなりますか?私はそれがかなり高い可能性のある間違いに変わると思う。集計関数が直感的ではない

aggregate(train[Sales != 0]$Sales, 
       by = list(train[Sales != 0]$Store), mean) 

多分これは間違った使用例です。しかし、私はまた、このソースコードをRのマニュアルで見た。

## Compute the averages for the variables in 'state.x77', grouped 
## according to the region (Northeast, South, North Central, West) that 
## each state belongs to. 
aggregate(state.x77, list(Region = state.region), mean) 

私の質問を読んでくれてありがとう。

+2

あなたのコードが間違っている可能性があります。 'train 'が行列またはdata.frameの場合、このコマンド' train [Sales!= 0] 'はあなたにすでにエラー(' undefined columns selected')を与えます。それにもかかわらず、 'list()'関数を避けるために 'aggregate(Sales〜Store、data = train [Sales!= 0、]、mean)'を行うことができます。 'state.x77'はすでにアタッチされているデータセットなので、この例のように使用できます。 – Jimbou

答えて

1

まず、集計関数の構文が気に入らない場合は、dplyrパッケージをご覧ください。その構文は少し面白いかもしれません。

のご質問にお答えするには:

  1. 第二引数は、ちょうどあなたが複数の変数を追加することができますので、リストであることが予想されます。
  2. train[Sales != 0]を2回使用する必要があります。それ以外の場合は、最初の引数とby引数が異なるインデックスを参照するためです。あなたはこのような何かを行うことができdplyr

    trainSales <- train[Sales != 0] 
    aggregate(trainSales$Sales, by = list(trainSales$Store), mean) 
    

ベースR-コード:あなたはまた、第一の部分集合を作ることができ

train %>% 
    filter(Sales != 0) %>% 
    group_by(Store) %>% 
    summarise_each(funs(mean)) 

あなたはそれが凝縮しているため、私はsummarise_eachを使用してご覧くださいデータセットを1行にすることもできますが、もちろんすべての行をそのまま残すようにすることもできます(その場合はdoを使用します)。

+0

'aggregate'はもっと便利な構文を持つ素敵な数式メソッドを持っています。 – Roland

+0

@ジャスパーありがとう。しかし、私は、データセット、集約する列、グループ化する集計関数、および集計関数を参照する列が必要な場合、この関数が優れていると思います。 – verystrongjoe

+0

@verystrongjoe私は 'dplyr'でも同様の例を追加しました。それはもっと直感的でしょうか?その構文の詳細については、[dplyrの紹介](https://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html)を参照してください。あなたがそれをぶら下げると、本当に便利です。 – Jasper