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

使用R代码创建区间频率表直方图时遇错,求解决方案

问题诊断与修复方案

错误原因

你生成breaks的代码逻辑有误:
as.numeric(gsub("\\[|\\)|\\(|\\]", "", unique(df$ClassInterval)))处理后得到的是"0, 10"这类带逗号的字符串,直接转换数值会失败,返回全NA的向量,导致hist函数无法识别有效断点,触发报错。

修复步骤

核心是生成包含所有区间端点的有序数值向量,有两种高效方式:

  1. 自动提取断点:从区间字符串中拆分出所有端点,去重后排序
  2. 手动指定断点:因你的区间是规则的10步长区间,可直接生成序列

完整修正代码

# 匹配你提供的频率表数据,修正Frequency数值
df <- data.frame(
  ClassInterval = c("[0, 10)", "[10, 20)", "[20, 30)", "[30, 40)", "[40, 50)"),
  Frequency = c(5, 18, 12, 6, 9)
)

# 提取组中值(也可直接使用表格里的组中值5,15,25,35,45)
class_intervals <- gsub("\\[|\\)|\\(|\\]", "", df$ClassInterval)
class_midpoints <- sapply(strsplit(class_intervals, ", "), function(x) mean(as.numeric(x)))

# 方法1:自动提取所有区间端点作为断点
interval_parts <- strsplit(gsub("\\[|\\)|\\(|\\]", "", df$ClassInterval), ", ")
breaks <- sort(unique(as.numeric(unlist(interval_parts))))

# 方法2:手动指定断点(适合规则步长的区间)
# breaks <- seq(0, 50, by=10)

# 生成直方图
hist(class_midpoints, breaks = breaks, weights = df$Frequency, col = "skyblue", 
     xlab = "身高(英寸)", main = "身高频数直方图")

说明

  • 修正后的breaks为c(0,10,20,30,40,50),符合hist函数对断点的要求:长度比组数多1的递增数值向量
  • 同步修正了Frequency的数值,与你提供的区间频率表一致,确保统计结果准确

内容的提问来源于stack exchange,提问作者Saïd Maanan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:10:58