【问题标题】:Calculate relative frequency for a certain group计算某个组的相对频率
【发布时间】:2014-12-28 11:51:15
【问题描述】:

我有一个分类变量的data.frame,我将它们分成了几组,我得到了每个组的计数。

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]

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以一步完成整个操作(根据您的原始数据 nyD 并且无需创建 ny1)。这是因为当你在summarise 之后运行mutate 时,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))
    

    【讨论】:

    • 或者更短一点:count(df, v1, v2) %&gt;% mutate(prop = n/sum(n))
    • 请注意,group() 表达式中变量的顺序也很重要,它将决定如何计算相对比例。
    • 注意原来的问题有3组;对于 2 组,答案未能给出相对频率。但是,count 版本适用于 2 个以上的组。
    • @bshor 你是什么意思?请举个例子
    猜你喜欢
    • 2017-04-30
    • 2023-04-05
    • 2022-01-27
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多