如何在R中按class和species计算二元变量died的占比?
计算各物种分组死亡率并绘制统计图
1. 数据预处理(计算死亡占比)
可以用dplyr包快速分组计算每个species下各class的died=1占比(由于died是0/1二元变量,直接取均值就是死亡占比):
# 加载dplyr包 library(dplyr) # 计算分组死亡占比 df_summary <- df %>% group_by(species, class) %>% summarize( died_ratio = mean(died, na.rm = TRUE), # 核心:计算死亡占比 total_samples = n(), # 可选:统计每组样本量,用于参考 .groups = "drop" # 取消分组状态,方便后续绘图 )
如果不想用dplyr,基础R也能实现:
# 基础R方法:用aggregate函数分组计算 df_summary <- aggregate(died ~ species + class, data = df, FUN = mean) names(df_summary)[3] <- "died_ratio" # 重命名列名更直观
2. 绘制分物种统计图
用ggplot2包绘制以class为X轴、死亡占比为Y轴的可视化图,两种常用展示方式:
方式一:用颜色区分不同物种
library(ggplot2) ggplot(df_summary, aes(x = class, y = died_ratio, color = species)) + geom_line(size = 1) + # 折线展示死亡占比随class的变化趋势 geom_point(size = 2) + # 标记每个class的具体数值点 labs(x = "Class", y = "死亡占比", color = "物种") + theme_minimal()
方式二:用分面单独展示每个物种
ggplot(df_summary, aes(x = class, y = died_ratio)) + geom_line(size = 1) + geom_point(size = 2) + labs(x = "Class", y = "死亡占比") + facet_wrap(~ species) + # 按物种拆分独立子图 theme_minimal()
补充:补全缺失分组(可选)
如果部分class在某个species下没有数据,结果会自动忽略该组合。若需要补全为0占比,可结合tidyr包处理:
library(tidyr) df_summary <- df %>% group_by(species, class) %>% summarize(died_ratio = mean(died, na.rm = TRUE), .groups = "drop") %>% complete(species, class = 1:40, fill = list(died_ratio = 0)) # 补全所有class,缺失值填0
内容的提问来源于stack exchange,提问作者starski
相关产品推荐
相关产品推荐

