首页 > 解决方案 > 计算组中在另一列中具有特定值的行的百分比

问题描述

我正在使用数据集birthwt

对于每个年龄,我想找出白人母亲的百分比。我的最终目标是按年龄在图中显示该百分比。我怎样才能做到这一点?我正在学习如何使用 tidyverse 函数,所以如果可能的话,我更愿意这样做。这是我到目前为止的工作:

library(tidyverse)
library(tidyselect)
library("MASS")

grouped <- birthwt %>%
  count(race, age)  %>%
  spread(key = race, value = n, fill = 0)

grouped

这会得到一个表格,其中每一行代表一个年龄,每个种族有一列代表该年龄的母亲人数。这种方法可能会也可能不会走上正确的道路。

标签: rdplyr

解决方案


我们可以计算每个年龄race的白色数量,age然后将其除以每个年龄的总行数以获得比率。

library(dplyr)
birthwt %>%
  group_by(age) %>%
  summarise(perc = sum(race == 1)/n())

# A tibble: 24 x 2
#     age  perc
#   <int> <dbl>
# 1    14 0.333
# 2    15 0.333
# 3    16 0.286
# 4    17 0.25 
# 5    18 0.6  
# 6    19 0.625
# 7    20 0.333
# 8    21 0.417
# 9    22 0.769
#10    23 0.308
# … with 14 more rows

在基础 R 中,我们可以使用aggregate以下相同的逻辑

aggregate(race~age, birthwt,function(x) sum(x == 1)/length(x))

或者类似于您使用的方法table,我们可以做

tab <- table(birthwt$age, birthwt$race)
tab[, "1"]/rowSums(tab)

推荐阅读