当前位置:  开发笔记 > 编程语言 > 正文

在dplyr中计算组内比例的更优雅的方法是什么?

如何解决《在dplyr中计算组内比例的更优雅的方法是什么?》经验,为你挑选了1个好方法。

给定一个data_frame df <- data_frame(X = c('A', 'A', 'B', 'B', 'B'), Y = c('M', 'N', 'M', 'M', 'N')),我需要拿出一个data_frame它告诉我们,50%A的是M,50%A的是N,67%B的是M,与33%B的是N.

我有一个小常规用来做它,但它看起来很可怕.

library(tidyverse)
df <- data_frame(X = c('A', 'A', 'B', 'B', 'B'), Y = c('M', 'N', 'M', 'M', 'N')) 
# here we go...
df %>% 
  group_by(X) %>% 
  mutate(n_X = n()) %>% 
  group_by(X, Y) %>% 
  summarise(PERCENT = n() / first(n_X))

哪个输出,

Source: local data frame [4 x 3]
Groups: X [?]

      X     Y   PERCENT
        
1     A     M 0.5000000
2     A     N 0.5000000
3     B     M 0.6666667
4     B     N 0.3333333

有没有更好的方法来做到这一点?当然我错过了什么.



1> Sven Hohenst..:

你可以使用prop.table:

df %>% 
  group_by(X, Y) %>%
  count() %>%
  mutate(PERCENT = prop.table(n))

结果:

      X     Y     n   PERCENT
         
1     A     M     1 0.5000000
2     A     N     1 0.5000000
3     B     M     2 0.6666667
4     B     N     1 0.3333333

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有