具有行子集的数据帧中的平均值 - R.

时间:2017-11-09 20:46:41

标签: r dataframe

我有一个数据框如下:

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。

3 个答案:

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