我有一个或多或少像这样的数据集:
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花费,但我不知道如何将计算反馈到每一行。
答案 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