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@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}} ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.