计算某个组的相对频率

时间:2014-12-28 11:51:16

标签: r dplyr

我有一个分类变量的数据框,我已将其分成几组,并得到每组的计数。

My original data nyD looks like:

Source: local data frame [7 x 3]
Groups: v1, v2, v3

  v1    v2   v3
1  a  plus  yes
2  a  plus  yes
3  a minus   no
4  b minus  yes
5  b     x  yes
6  c     x notk
7  c     x notk

I performed the following operations using dplyr:

ny1 <- nyD %>% group_by(v1,v2,v3)%>%
           summarise(count=n()) %>%
           mutate(prop = count/sum(count))


My data "ny1" looks like:

Source: local data frame [5 x 5]
Groups: v1, v2

  v1    v2   v3 count prop
1  a minus   no     1    1
2  a  plus  yes     2    1
3  b minus  yes     1    1
4  b     x  yes     1    1
5  c     x notk     2    1

我想计算prop变量中V1组的相对频率。 prop变量应该是相应的计数除以“V1组的计数总和”。 V1组总共有3“a”,2“b”和1“c”。也就是说,ny1 $ prop [1]&lt; - 1/3,ny1 $ prop [2]&lt; - 2/3 .... 使用count / sum(count)的mutate操作不正确。我需要指定总和应仅归入V1组。 有没有办法使用dplyr来实现这个目标?

1 个答案:

答案 0 :(得分:6)

您可以一步完成这一切(从原始数据nyD开始,而不创建ny1)。这是因为当您在mutate之后运行summarise时,dplyr默认会丢弃一个聚合级别(v2)(当然我dplyr中最喜欢的功能)并且仅由v1

汇总
nyD %>% 
   group_by(v1, v2) %>%
   summarise(count = n()) %>%
   mutate(prop = count/sum(count))

# Source: local data frame [5 x 4]
# Groups: v1
# 
#   v1    v2 count      prop
# 1  a minus     1 0.3333333
# 2  a  plus     2 0.6666667
# 3  b minus     1 0.5000000
# 4  b     x     1 0.5000000
# 5  c     x     2 1.0000000

或使用count的较短版本(感谢@beginneR)

df %>% 
  count(v1, v2) %>% 
  mutate(prop = n/sum(n))