如何在R中按种族/族裔分组计算得分>1的学生占比?
按种族/族裔分组计算Grade>1学生的占比
示例数据集
| ID | Grade | Race/Ethnicity |
|---|---|---|
| 1 | 0 | White |
| 2 | 2 | Asian |
| 3 | 2 | Hispanic |
| 4 | 0 | Asian |
| 5 | 3 | Black |
| 6 | 1 | White |
| 7 | 2 | Hispanic |
| 8 | 1 | Black |
需求:按Race/Ethnicity分组,计算每组中Grade>1的学生占该组总人数的百分比,要求每个种族/族裔仅显示一行结果。
你之前的代码使用ave会为原数据的每一行生成对应组的百分比,但未做聚合去重,因此导致每个种族的行重复出现。
正确解决方案
使用dplyr的group_by + summarize完成分组聚合,这是处理这类分组统计需求的标准方式:
library(dplyr) library(scales) data %>% group_by(`Race/Ethnicity`) %>% summarize( Percent = label_percent()(mean(Grade > 1)) )
代码说明
group_by(Race/Ethnicity):指定按种族/族裔字段分组summarize():对每个分组执行聚合计算,最终每个分组仅保留一行结果mean(Grade > 1):Grade>1生成逻辑向量,mean()会自动将TRUE转为1、FALSE转为0,计算结果即为该组满足条件的学生占比label_percent():将比例数值转换为带百分号的字符串格式
输出结果
| Race/Ethnicity | Percent |
|---|---|
| White | 0% |
| Asian | 50% |
| Hispanic | 100% |
| Black | 50% |
内容的提问来源于stack exchange,提问作者Evey
相关产品推荐
相关产品推荐

