在group_by dplyr R之后得到每个组的值的比例

时间:2017-03-29 22:40:08

标签: r dplyr

在python pandas中,我只需要df.groupby(x,y).value_counts(normalize=True)来获取组中每个值的比例。但是我一直无法在R中找到这样做的方法。

我已经将我的df分组为x和y并总结计算频率, 就像这样df %>% group_by(x,y) %>% summarize(count=n())但我希望看到每个x的每个y的比例。

x   y  count
1   A   22      
1   B   65      
1   C   94      
1   D   40      
2   D   34      
2   E   1       
2   F   6       
3   E   4       
3   F   13      
例如,新的比例列应该有

x   y   proportion
1   A   0.0995475
1   B   0.2941176
1   C   0.4253393
1   D   0.1809955
2   D   0.8292683
2   E   0.024390
2   F   0.1463415
3   E   0.2352941
3   F   0.7647059

2 个答案:

答案 0 :(得分:3)

我认为你需要按x分组才能在你的例子中得到结果。假设数据框名为df1

library(dplyr)
  df1 %>% 
  group_by(x) %>% 
  mutate(proportion = count/sum(count))

答案 1 :(得分:1)

如果我们需要base R选项,可以使用ave

来完成
transform(df1, proportion = count/ave(count, x, FUN = sum))[-3]
#  x y proportion
#1 1 A 0.09954751
#2 1 B 0.29411765
#3 1 C 0.42533937
#4 1 D 0.18099548
#5 2 D 0.82926829
#6 2 E 0.02439024
#7 2 F 0.14634146
#8 3 E 0.23529412
#9 3 F 0.76470588