You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言按年份统计男女占比代码错误排查

enter image description here

问题核心

需求是统计奥林匹克数据集中,每个年份对应的男性、女性人数占当年总人数的比例,原有代码运行结果不符合预期,原代码如下:

freq.table = table(olympicData$Sex, olympicData$Year)
Total = rowSums(freq.table)
Freq = freq.table/Total
错误原因

原有代码的计算逻辑完全不匹配需求:

  • rowSums(freq.table)统计的是所有年份汇总后的男性总人数、女性总人数,不是每个年份的总人数
  • R中矩阵和向量做运算时默认按列对齐循环,用2行多列的频数表除以长度为2的行和向量,得到的是「每年某性别人数占所有年份该性别总人数的比例」,和“单年份内性别占比”的需求完全不符。
修复方案

基础R实现

要计算单年份内的性别占比,需要先按列(年份维度)求每年总人数,再将每个单元格的频数除以对应年份的总人数,用sweep函数可以精准按维度做运算,避免对齐错误:

# 生成性别×年份的交叉频数表
freq.table <- table(olympicData$Sex, olympicData$Year)
# 按列(年份)计算每年总参赛人数
year_total <- colSums(freq.table)
# 按列对齐,每列频数除以对应年份总人数,得到当年性别占比
year_sex_ratio <- sweep(freq.table, MARGIN = 2, STATS = year_total, FUN = "/")

dplyr实现(长表输出更易读)

如果需要输出结构化的长格式结果,直接用dplyr分组计算更直观,不需要手动处理二维表:

library(dplyr)
olympicData %>%
  group_by(Year, Sex) %>%
  # 先统计每年每个性别的人数
  summarise(people_count = n(), .groups = "drop_last") %>%
  # 按年份分组计算占比
  mutate(sex_ratio = people_count / sum(people_count))

内容的提问来源于stack exchange,提问作者Demo12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:51:33