0

おそらく、私は問題をうまく定義していません。Rが何から戻ってくるのか理解していないようですsapply。階層データの大きなデータフレームがあります。列の約半分は因子であり、半分は数値です。いくつかの因子を含み、数値列の合計を含む新しいデータフレームを取得したいのですが、合計を因子レベルで分離したままにしておきたいです。

たとえば、以下のサンプルデータから、州、地区、ブランチが同じであるデータフレームを作成したいと思いますが、同じタイプで異なる色の注文のデータを合計します。繰り返し使用sapplyすればうまくいくと思いますが、うまくいかないようです。

サンプルデータ:

state district branch   order   colour  number  cost    amount
CA   central newtown    shoes   black   6   25.50  127.40
CA   central newtown    shoes   brown   3   32.12   75.40
CA   central newtown    gloves  blue    15  12.20  157.42
CA   central newtown    gloves  black   9   8.70    65.37
CA  central columbus    shoes   black   12  30.75   316.99
CA  central columbus    shoes   brown   1   40.98    45.00
CA  central columbus    gloves  blue    47  11.78   498.32
CA  central columbus    gloves  black   23  7.60    135.50
4

2 に答える 2

1

のための別の仕事aggregate。データフレームの呼び出しdat

aggregate(cbind(cost, amount) ~ state+district+branch+order, data=dat, FUN=sum)

##   state district   branch  order  cost amount
## 1    CA  central columbus gloves 19.38 633.82
## 2    CA  central  newtown gloves 20.90 222.79
## 3    CA  central columbus  shoes 71.73 361.99
## 4    CA  central  newtown  shoes 57.62 202.80

〜の左側は、cbind各列を個別に表示することを示すために使用されます。指定した場合cost + amount、これらは数値であるため、ここでは合計を意味します。〜の右側には因子があります。したがって、+は、各因子の各レベルで集計していることを意味します。

于 2013-01-01T03:00:59.327 に答える
1

私は常にSQLが集約のために最も直感的であると思っています:)

    library(sqldf)

    # write a full aggregation command, grouping by your specified columns
    x <- sqldf( "select state, district, branch, order, sum( cost ) as sumcost, sum(amount) as sumamount from yourdata group by state, district, branch, order" )

    # print your result
    x

これがaggregate()とtapply()の説明であり、これが集約のためのr内のsqlの同じ説明です。

于 2013-01-01T03:10:41.937 に答える