Getting frequency values from histogram in R

I know how to draw histograms or other frequency/percentage related tables. But now I want to know, how can I get those frequency values in a table to use after the fact.

I have a massive dataset, now I draw a histogram with a set binwidth. I want to extract the frequency value (i.e. value on y-axis) that corresponds to each binwidth and save it somewhere.

Can someone please help me with this? Thank you!


Solution 1:

The hist function has a return value (an object of class 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"

Solution 2:

From ?hist: Value

an object of class "histogram" which is a list with components:

  • breaks the n+1 cell boundaries (= breaks if that was a vector). These are the nominal breaks, not with the boundary fuzz.
  • counts n integers; for each cell, the number of x[] inside.
  • density values f^(x[i]), as estimated density values. If all(diff(breaks) == 1), they are the relative frequencies counts/n and in general satisfy sum[i; f^(x[i]) (b[i+1]-b[i])] = 1, where b[i] = breaks[i].
  • intensities same as density. Deprecated, but retained for compatibility.
  • mids the n cell midpoints.
  • xname a character string with the actual x argument name.
  • equidist logical, indicating if the distances between breaks are all the same.

breaks and density provide just about all you need:

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