泰坦尼克号数据集性别维度生存率百分比计算错误排查求助
泰坦尼克号性别生存率计算错误修正
你的代码问题出在分组逻辑和总和计算的范围:
- 当前
group_by(Survived, Sex)后,summarize得到的是「存活状态+性别」组合的人数,后续mutate里的sum(number)会计算所有行的总人数(即全体乘客数),而非每个性别的总人数,导致百分比不是你需要的「单个性别内的存活占比」。
修正方案
以下两种方法都可以得到正确的结果:
方法一:先按性别分组统计
titanic_table <- train_data %>% group_by(Sex) %>% count(Survived) %>% mutate( Survived = factor(Survived, levels = c(0, 1), labels = c("No", "Yes")), total_number = sum(n), # 按当前分组(Sex)计算总人数 percentage = (n / total_number) * 100 )
逻辑说明:
group_by(Sex)先按性别分组count(Survived)统计每个性别下,存活/未存活的乘客数sum(n)此时会计算每个性别对应的总人数,以此为基数计算百分比
方法二:调整分组保留层级
titanic_table <- train_data %>% group_by(Survived, Sex) %>% summarize(number = n(), .groups = "drop_last") %>% # 仅保留Sex分组 mutate( Survived = factor(Survived, levels = c(0, 1), labels = c("No", "Yes")), total_number = sum(number), # 基于Sex分组计算总人数 percentage = (number / total_number) * 100 )
逻辑说明:
- 先按「存活状态+性别」分组统计人数
.groups = "drop_last"移除最内层的Survived分组,保留Sex分组- 此时
sum(number)会针对每个性别计算总人数,确保百分比计算正确
验证
修正后,你会看到女性存活占比约74%,男性约19%,符合泰坦尼克号数据集的真实分布。
内容的提问来源于stack exchange,提问作者melissa
相关产品推荐
相关产品推荐

