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

在R语言中计算种族年龄表各群体中位年龄的方法求助

解决种族年龄中位数计算问题

你的核心问题是数据格式不匹配:当前数据是宽格式的汇总表(每行对应一个年龄,列是各种族的对应人数),但tapply需要的是长格式的个体级数据(每一行代表一个人的年龄和所属种族),所以直接使用tapply会因多数种族无有效展开的年龄记录返回NA。

步骤1:转换数据格式

先把宽格式数据转成长格式,并按人数展开为个体记录(假设你的数据框名为df,第一列是年龄列age):

# 先安装并加载tidyverse包(如果未安装)
# install.packages("tidyverse")
library(tidyverse)

# 宽转长并展开个体记录
long_df <- df %>%
  pivot_longer(cols = -age, names_to = "RACE", values_to = "count") %>%
  uncount(count)  # 按count值重复行,生成每个个体的年龄数据

步骤2:计算各种族中位年龄

可以用两种方式实现:

方式1:使用tapply

RaceAge <- tapply(long_df$age, long_df$RACE, median)

输出结果会是类似这样的向量:

Asian    Black Hispanic    White 
20.85833    21.00 21.48889    20.00 

方式2:使用dplyr分组计算(更直观)

RaceAge <- long_df %>%
  group_by(RACE) %>%
  summarise(median_age = median(age))

输出结果是数据框格式,便于后续处理:

# A tibble: 4 × 2
  RACE    median_age
  <chr>        <dbl>
1 Asian         20.9
2 Black         21  
3 Hispanic      21.5
4 White         20  

验证示例数据

用你提供的示例数据测试,构造数据框代码:

df <- data.frame(
  age = c(15,17,19,20,20.8388888888889,20.8583333333333,21,21.4888888888889,21.5277777777778),
  Asian = c(0,0,0,0,2,2,1,0,0),
  Black = c(0,0,0,0,0,0,7,0,0),
  Hispanic = c(0,0,0,0,0,0,1,2,2),
  White = c(6,9,8,12,0,0,31,0,0)
)

运行上述转换和计算代码,即可得到正确的中位年龄结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:35:18