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

R语言实现连续变量区间化绝对频率与相对频率计算

解决方法

你原有代码存在两个核心问题:

  • table(datos$V1)是对原始向量里的每一个独立数值做频次统计,没有按你计算得到的k个区间做分组,输出结果不是你需要的分组频率
  • 存在大小写笔误:vectordatos <- datos$v1中的列名是大写V1,R对大小写敏感,这行代码运行会直接报错。

你调用hist()生成的对象里已经存储了分组区间、每个区间的样本计数,直接提取即可使用,不需要重复做分组计算。

修正后可直接运行的代码

read.table("datos.txt", header = FALSE) -> datos
largo <- length(datos$V1)
# 按Sturges法则计算分组数k
k <- round(1 + log2(largo), digits = 0)
# 生成直方图对象,添加plot=F参数可避免直接弹出绘图窗口
histograma <- hist(datos$V1, breaks = k, plot = FALSE)
# 提取每个区间的绝对频率
FA <- histograma$counts
# 计算对应区间的相对频率
FR <- FA / largo
# 为结果添加区间标签,提升可读性
interval_tags <- paste0(
  "[", round(histograma$breaks[-length(histograma$breaks)], 2),
  ", ", round(histograma$breaks[-1], 2), 
  c(rep(")", length(histograma$breaks)-2), "]")
)
names(FA) <- interval_tags
names(FR) <- interval_tags

# 打印输出结果
FA
FR

如果需要整理成规范的频率表数据框,补充以下代码即可:

freq_table <- data.frame(
  分组区间 = interval_tags,
  绝对频率 = FA,
  相对频率 = FR,
  row.names = NULL
)

替代实现方案

如果不想依赖hist的返回结果,也可以用cut()函数直接对原始数据做分箱统计,结果和上述方法基本一致:

# 按k个区间切分数据
binned_data <- cut(datos$V1, breaks = k)
FA <- table(binned_data)
FR <- prop.table(FA) # 该函数直接计算相对频率,效果和除以总样本量完全一致

用你提供的36条测试样本运行代码,最终会得到7个分组,对应绝对频次分别为1、2、6、10、8、6、3,所有组的相对频率加总为1,完全符合连续变量分组频率统计的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 06:09:10