R 取次平均值,并用其分类创建一个新列

R 取次平均值,并用其分类创建一个新列,r,aggregate,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 p

我的数据集大致如下:

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支出,但我不知道如何将计算结果反馈到每一行

以下是我使用
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
这是我(承认有点笨拙)在BaseR中的解决方案

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
pc\u花费