如何在R语言中计算频数表的均值与中位数?
解决频数表的均值和中位数计算问题
你的tab1是R中的table类型,直接用mean()或summary()会默认计算频数的统计量,而非年龄的,所以结果错误。以下是两种简便计算方式:
方法1:加权计算(无需展开原始数据,高效)
计算均值
使用weighted.mean()函数,直接基于年龄和对应频数计算加权均值:
# 提取年龄(转为数值型)和频数 ages <- as.numeric(names(tab1)) freqs <- as.vector(tab1) # 计算加权均值 mean_age <- weighted.mean(x = ages, w = freqs) mean_age
计算中位数
通过累计频数找到中位数所在的年龄区间:
# 计算总样本量 total <- sum(freqs) # 计算累计频数 cumulative_freq <- cumsum(freqs) # 找到第一个累计频数超过总样本量一半的年龄 median_age <- ages[which(cumulative_freq >= total/2)[1]] median_age
方法2:展开为原始数据向量(直观,适合样本量不大的情况)
把频数表还原为每个年龄对应的原始数据向量,再用常规统计函数计算:
# 展开原始数据 raw_data <- rep(ages, times = freqs) # 计算均值和中位数 mean(raw_data) median(raw_data)
两种方法结果一致,方法1更适合大样本场景,避免内存占用过高。
内容的提问来源于stack exchange,提问作者user23311973
相关产品推荐
相关产品推荐

