从R中的直方图获取频率值

时间:2011-10-12 13:03:28

标签: r histogram frequency

我知道如何绘制直方图或其他频率/百分比相关表格。 但是现在我想知道,我怎样才能在表格中获得这些频率值。

我有一个庞大的数据集,现在我绘制一个设置binwidth的直方图。我想提取对应于每个binwidth的频率值(即y轴上的值)并将其保存在某处。

有人可以帮我这个吗? 谢谢!

3 个答案:

答案 0 :(得分:44)

hist函数有一个返回值(类histogram的对象):

R> res <- hist(rnorm(100))
R> res
$breaks
[1] -4 -3 -2 -1  0  1  2  3  4

$counts
[1]  1  2 17 27 34 16  2  1

$intensities
[1] 0.01 0.02 0.17 0.27 0.34 0.16 0.02 0.01

$density
[1] 0.01 0.02 0.17 0.27 0.34 0.16 0.02 0.01

$mids
[1] -3.5 -2.5 -1.5 -0.5  0.5  1.5  2.5  3.5

$xname
[1] "rnorm(100)"

$equidist
[1] TRUE

attr(,"class")
[1] "histogram"

答案 1 :(得分:20)

来自?hist: 值

类“histogram”的对象,它是一个包含组件的列表:

  • 打破n + 1个单元格边界(=如果是向量则断开)。 这些是名义上的中断,而不是边界模糊。
  • 计算n个整数;对于每个单元格,x []里面的数量。
  • 密度值f ^(x [i]),作为估计的密度值。如果 all(diff(break)== 1),它们是相对频率count / n 并且通常满足sum [i; f ^(x [i])(b [i + 1] -b [i])] = 1,其中b [i] = break [i]。
  • 强度与密度相同。已弃用,但仍保留 兼容性。
  • 中等n个细胞中点。
  • xname包含实际x参数名称的字符串。
  • equidist logical,表示休息之间的距离是否全部 同样。

breaksdensity提供您所需的一切:

histrv<-hist(x)
histrv$breaks
histrv$density

答案 2 :(得分:3)

如果有人在考虑ggplot的{​​{1}}时遇到此问题,请注意有一种方法可以从ggplot对象中提取数据。

以下便捷函数输出一个数据帧,其中每个bin的上限(geom_histogram),每个bin的上限(xmin),每个bin的中间点({{1 }}),以及频率值(xmax)。

x

插图:

y

我在这里回答的一个相关问题(Cumulative histogram with ggplot2)。