首页 > 解决方案 > R data.frame 聚合数据以计算多样性比率

问题描述

我在R中有一个人口统计数据的数据框

Name...Region...Gender

...A...........1.............F

...B...........2.............M

...C...........1.............F

...D...........1.............M

...E...........2.............M

我想计算每个地区的性别比例。输出应如下所示:

Region ..........GenderRatio

....  1........................(0.67)

....  2........................(0.50)

这可以使用正常的 BODMAS 使用来计算。有什么有效的方法可以在 R 中计算它吗?

标签: rdataframe

解决方案


作为(base R)替代方案,您可以使用bywith为男性/女性prop.table(table(...))返回一个分数list

with(df, by(df, Region, function(x) prop.table(table(x$Gender))))
#Region: 1
#
#        F         M
#0.6666667 0.3333333
#------------------------------------------------------------
#Region: 2
#
#F M
#0 1

或者只返回男性部分

with(df, by(df, Region, function(x) prop.table(table(x$Gender))[2]))
#Region: 1
#[1] 0.3333333
#------------------------------------------------------------
#Region: 2
#[1] 1

data.frame或者将男性分数和区域存储stack在上述结果中:

setNames(
    stack(with(df, by(df, Region, function(x) prop.table(table(x$Gender))[2]))),
    c("GenderRatio", "Region"))
#  GenderRatio Region
#1   0.3333333      1
#2   1.0000000      2

推荐阅读