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