[R] Creating a histogram from a frequency vector - correction!

Stephen Ellison S@E|||@on @end|ng |rom LGCGroup@com
Wed Oct 9 18:31:42 CEST 2019


Sorry; that was not the working version.

Should be

freqs <- c(11, 19,  5,  3,  2,  1,  0,  0,  2,  3,  2)

freqhist <- function(counts, xname=deparse(substitute(counts)), breaks=0:length(counts), 
	mids=(breaks[-1]+breaks[-length(breaks)])/2 , ...){
	
	binwidths <- diff(breaks)
	dens <- counts/(binwidths*sum(counts))

	retval <- structure(list(breaks=breaks, counts=counts, density=dens, 
	                    mids=mids, xname=xname, 
	                    equidist=all(diff(breaks)==diff(breaks[1:2]) ) ),
		class="histogram")
}

plot(freqhist(freqs, breaks=c(4*0:5, 10*3:5, 70, 100, 140)) )

#Also works equidistant with default 0:length(counts) breaks:
 
f2 <- c(30, 39, 31, 29, 10,  6,  3,  1,  0,  1)
plot(freqhist(f2))

Steve E


> -----Original Message-----
> From: Stephen Ellison
> Sent: 09 October 2019 17:29
> To: 'Nick Wray'; r-help using r-project.org
> Subject: RE: [R] Creating a histogram from a frequency vector
> 
> > I have a vector like say 73,53,42,67,41,50 where these numbers are the
> > number of occurrences of the data values 1,2,3,4,5,6 - so in essence I have
> > the frequency bit from the hist() function.  I can't see an elegant way
> (there
> > are clearly messy workarounds like generating a vector of 73 1's, 53 2's etc)
> of
> > creating a histogram from this data set.  Is there one?
> 
> hist() generates a histogram object that it then plots.
> 
> You can use your frequency vector to generate the same kind of object and
> then just plot it, though you'll have to provide breaks (possibly defaulted, if
> they're just 0:length(frequencies) ) and you'd have to work on the density
> component a bit.
> 
> I'm sure this is out there somewhere already, but here's as an example, using
> values pulled from a (nonequidistant) ?hist example and using a short off-
> the-cuff function to build the histogram object:
> 
> freqs <- c(11, 19,  5,  3,  2,  1,  0,  0,  2,  3,  2) #islands
> brks <- c(4*0:5, 10*3:5, 70, 100, 140)
> 
> freqhist <- function(counts, xname=deparse(substitute(frequencies)),
> breaks=0:length(frequencies),
> 	mids=(breaks[-1]+breaks[-length(breaks)])/2 , ...){
> 
> 	binwidths <- diff(breaks) #This copes with unequal break intervals
> 	dens <- counts/(binwidths*sum(counts))
> 
> 	retval <- structure(list(breaks=breaks, counts=counts,, density=dens,
> mids=mids, xname=xname, equidist=all(diff(breaks)==diff(breaks[1:2]) ),
> 		class="histogram")
> }
> 
> plot(freqhist(freqs, breaks=brks))
> 
> #Also works equidistant with default 0:length(counts) breaks:
> 
> f2 <- c(30, 39, 31, 29, 10,  6,  3,  1,  0,  1)
> plot(freqhist(f2))
> 
> Steve Ellison
> 
> 



*******************************************************************
This email and any attachments are confidential. Any use...{{dropped:8}}



More information about the R-help mailing list