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 回答