R data.frame聚合数据以计算分集率

R data.frame聚合数据以计算分集率,r,dataframe,R,Dataframe,我在R Name...Region...Gender ...A...........1.............F ...B...........2.............M ...C...........1.............F ...D...........1.............M ...E...........2.............M 我想计算每个地区的性别比例。输出应如下所示: Region ..........GenderRatio .... 1..

我在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中计算它?

您可以使用R中的
dplyr
库进行各种数据处理。有关
dplyr
和其他非常有用的R软件包的更多信息,请参阅

例如:

首先,我创建一些示例数据。(我对它做了一点修改,使其具有适合您的输出的性别比例。)

输出为:

  region gender_ratio
   <dbl>        <dbl>
1      1        0.667
2      2        0.5
地区性别比
1      1        0.667
2      2        0.5
希望这能有所帮助。

作为一种(基本R)替代方法,您可以使用
by
prop.table(table(…)
返回男性/女性分数的
列表

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
或者将雄性部分和区域存储在
数据框中
只需
堆栈
上述结果:

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

输出与输入不匹配:示例数据中区域2为100%男性。您好,欢迎继续。你可能想阅读并改进你提问的方式。这为愿意帮助你的人简化了事情,因此也可能改善你的生活谢谢@symbolrush。这起作用了。
with(df, by(df, Region, function(x) prop.table(table(x$Gender))[2]))
#Region: 1
#[1] 0.3333333
#------------------------------------------------------------
#Region: 2
#[1] 1
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