我有一个数据框如下:
Member Category Total
1001 1 5
1001 2 4
1001 3 9
1003 1 7
1003 2 5
1003 3 2
1005 1 2
1005 3 5
我需要得到:
Member Category Total Average
1001 1 5 0.27
1001 2 4 0.22
1001 3 9 0.5
1003 1 7 0.5
1003 2 5 0.35
1003 3 2 0.15
1005 1 2 0.28
1005 3 5 0.72
即每个成员的总数的平均值。例如,成员1001总共有18个,其中类别1代表总数的27%。因此平均值为0.27。
答案 0 :(得分:3)
dplyr
library(dplyr)
df %>% group_by(Member) %>%
mutate(Average = Total/sum(Total)) # to round use mutate(Average = round(Total/sum(Total), 2))
# A tibble: 8 x 4
# Groups: Member [3]
Member Category Total Average
<int> <int> <int> <dbl>
1 1001 1 5 0.2777778
2 1001 2 4 0.2222222
3 1001 3 9 0.5000000
4 1003 1 7 0.5000000
5 1003 2 5 0.3571429
6 1003 3 2 0.1428571
7 1005 1 2 0.2857143
8 1005 3 5 0.7142857
答案 1 :(得分:2)
或者我们可以使用data.table
library(data.table)
setDT(df1)[, Average := round(Total/sum(Total), 2), Member]
答案 2 :(得分:1)
在基地R
df['Average']=df$Total/ave(df$Total,df$Member,FUN=sum)
df
Member Category Total Average
1 1001 1 5 0.2777778
2 1001 2 4 0.2222222
3 1001 3 9 0.5000000
4 1003 1 7 0.5000000
5 1003 2 5 0.3571429
6 1003 3 2 0.1428571
7 1005 1 2 0.2857143
8 1005 3 5 0.7142857