采用小平均值并创建一个包含其分类的新列

时间:2015-06-18 15:42:59

标签: r aggregate

我有一个或多或少像这样的数据集:

place_id   person_id   amount
A          Huey        20
A          Louie       30
A          Dewey       40
B          Huey        80
B          Dewey       100
C          Louie       500

让我们说这个地方是一家餐馆,我想计算每个地方的人均消费,并将其添加为新栏目:

place_id   person_id   amount   pc_spend
A          Huey        20       30
A          Louie       30       30
A          Dewey       40       30
B          Huey        80       90
B          Dewey       100      90
C          Louie       500      500

我知道如何使用aggregate()计算R中的pc花费,但我不知道如何将计算反馈到每一行。

1 个答案:

答案 0 :(得分:0)

以下是dplyr的解决方案:

library(dplyr)
df %>% group_by(place_id) %>% mutate(pc_spend = mean(amount) )
Source: local data frame [6 x 4]
Groups: place_id

  place_id person_id amount pc_spend
1        A      Huey     20       30
2        A     Louie     30       30
3        A     Dewey     40       30
4        B      Huey     80       90
5        B     Dewey    100       90
6        C     Louie    500      500

这是基础R中的我(有点笨拙我承认)解决方案;

pc_spend <- tapply(df$amount, df$place_id, mean)
df[df$"place_id" == "A" , "pc_spend"] <- pc_spend[1]
df[df$"place_id" == "B" , "pc_spend"] <- pc_spend[2]
df[df$"place_id" == "C" , "pc_spend"] <- pc_spend[3]
df
  place_id person_id amount pc_spend
1        A      Huey     20       30
2        A     Louie     30       30
3        A     Dewey     40       30
4        B      Huey     80       90
5        B     Dewey    100       90
6        C     Louie    500      500