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