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

如何在R中计算分组区间数据的近似均值、中位数与众数

R实现分组数据的构造与描述统计计算

1. 构造结构化数据框

首先将分组区间和频数存入数据框,同时拆分区间得到每组上下限、计算组中值,为后续统计计算做准备:

# 存入原始数据
df <- data.frame(
  value = c("1-6", "7-16", "17-21", "22-51", "52-80", "81-110"),
  frequency = c(300, 400, 300, 1200, 800, 55)
)

# 拆分区间得到每组上下限
df$lower <- as.numeric(sapply(strsplit(df$value, "-"), "[", 1))
df$upper <- as.numeric(sapply(strsplit(df$value, "-"), "[", 2))

# 计算组中值
df$mid <- (df$lower + df$upper)/2

2. 计算近似均值

分组数据的均值用组中值代表每组的平均水平,按频数加权计算:

total_n <- sum(df$frequency)
approx_mean <- sum(df$mid * df$frequency) / total_n
# 计算结果约为37.05

3. 计算近似中位数

中位数计算公式为:中位数 = 中位数组下限 + ((总频数/2 - 中位数组前累积频数)/中位数组频数) * 组距

# 计算累积频数
df$cum_freq <- cumsum(df$frequency)
# 定位中位数所在组(累积频数首次超过总频数一半的组)
median_group_idx <- which(df$cum_freq >= total_n/2)[1]

L <- df$lower[median_group_idx]
pre_cum_freq <- df$cum_freq[median_group_idx - 1]
median_group_freq <- df$frequency[median_group_idx]
group_width <- df$upper[median_group_idx] - df$lower[median_group_idx]

approx_median <- L + ((total_n/2 - pre_cum_freq) / median_group_freq) * group_width
# 计算结果约为35.19

4. 计算近似众数

众数计算公式为:众数 = 众数组下限 + (众数组与前一组频数差/(众数组与前一组频数差 + 众数组与后一组频数差)) * 组距

# 定位频数最高的众数组
mode_group_idx <- which.max(df$frequency)

L <- df$lower[mode_group_idx]
delta1 <- df$frequency[mode_group_idx] - df$frequency[mode_group_idx - 1]
delta2 <- df$frequency[mode_group_idx] - df$frequency[mode_group_idx + 1]
group_width <- df$upper[mode_group_idx] - df$lower[mode_group_idx]

approx_mode <- L + (delta1/(delta1 + delta2)) * group_width
# 计算结果约为42.77

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:45:04