【问题标题】:Finding percentage of male and females from dataframe从数据框中查找男性和女性的百分比
【发布时间】:2020-03-03 00:19:19
【问题描述】:

我有一个包含列的数据框

year sex   name          n   prop
  <dbl> <chr> <chr>     <int>  <dbl>
1  1880 F     Mary       7065 0.0724
2  1880 F     Anna       2604 0.0267
3  1880 F     Emma       2003 0.0205
4  1880 F     Elizabeth  1939 0.0199
5  1880 F     Minnie     1746 0.0179
6  1880 F     Margaret   1578 0.0162

来自 babynames 库,我想找到某个名字在每个性别中所占的百分比。例如,如果名字是 Anna(一个传统的女性名字),找出在所有叫 Anna 的婴儿中,有多少是男性,有多少是女性。

我知道我必须按名称过滤,但除此之外我不确定如何获得百分比。我尝试了 group_by(year) 和 group_by(gender) 和 summarise() 但我没有得到我需要的东西。我不确定这是否是正确的做法。

编辑: 我想按年看(比如说,1880 年 x% 是 F,其余的是男性,而 1882 年 y% 是 F) 谢谢

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以filter 名称"Anna",将它们的计数与sex 相加并计算比率。

    library(babynames)
    library(dplyr)
    
    babynames %>%
      filter(name == "Anna") %>%
      group_by(sex) %>%
      summarise(n = sum(n)) %>%
      mutate(n = n/sum(n) * 100)
    
    #   sex    n
    #  <chr>  <dbl>
    #1 F      99.7  
    #2 M      0.307
    

    【讨论】:

    • 非常感谢!你知道我怎么能按年展示这个吗?例如,找出 1880 年和 1881 年有多少男性,以此类推?
    • @temo 是的,只需在group_by 中添加year 就像:babynames %&gt;% filter(name == "Anna") %&gt;% group_by(year, sex) %&gt;% summarise(n = sum(n)) %&gt;% mutate(n = n/sum(n) * 100)
    【解决方案2】:

    使用函数表并将结果除以具有所需名称的婴儿总数,在本例中为“Ana”

    library(babynames)
    table(babynames$sex[babynames$name=="Ana"])/sum(babynames$name=="Ana")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2016-09-02
      • 2020-05-13
      • 1970-01-01
      相关资源
      最近更新 更多