R语言dplyr按分组计算各分类观测值占比实现方法
解决方案
你只需要在现有count()代码的基础上,追加按物种分组计算占比的步骤即可,完整可运行代码:
library(dplyr) data %>% count(Species, Color) %>% group_by(Species) %>% mutate(proportion = n / sum(n)) %>% ungroup()
关键说明
count(Species, Color)执行完后,数据是按「物种+颜色」两个维度联合分组的,这时候直接计算总和只会得到当前行的n值,拿不到单个物种的总观测数,所以必须重新调用group_by(Species)把分组维度改成仅按物种划分- 分组后
sum(n)会自动计算对应物种下所有颜色的观测总数,单行n除以这个总数就是你要的组内占比 - 最后加
ungroup()是个好习惯,可以避免残留的分组规则影响你后续对数据的其他操作 - 运行后得到的比例数值和你给出的期望结果完全匹配,仅tulip下的颜色行默认按字母序排列(pink排在red前),如果需要和示例顺序完全一致,追加自定义排序规则即可,不影响数值正确性。
运行输出结果参考:
# A tibble: 6 × 4 Species Color n proportion <chr> <chr> <int> <dbl> 1 daisy white 1 0.5 2 daisy yellow 1 0.5 3 iris purple 3 1 4 tulip pink 2 0.25 5 tulip red 2 0.25 6 tulip yellow 4 0.5
内容的提问来源于stack exchange,提问作者Kate71
相关产品推荐
相关产品推荐

