[R] Interquartile Range

William Dunlap wdunlap at tibco.com
Tue Apr 19 17:34:40 CEST 2016


> That didn't work Jim!

It always helps to say how the suggestion did not work.  Jim's
function had a typo in it - was that the problem?  Or did you not
change the call to ddply to use that function.  Here is something
that might "work" for you:

 library(plyr)

 data <- data.frame(groupColumn=rep(1:5,1:5), col1=2^(0:14))
 myIqr <- function(x) {
     paste(round(quantile(x,0.25),0),round(quantile(x,0.75),0),sep="-")
 }
 ddply(data, ~groupColumn, summarise, col1_myIqr=myIqr(col1),
col1_IQR=stats::IQR(col1))
 #  groupColumn col1_myIqr col1_IQR
 #1           1        1-1        0
 #2           2        2-4        1
 #3           3      12-24       12
 #4           4    112-320      208
 #5           5  2048-8192     6144

The important point is that
    paste(round(quantile(x,0.25),0),round(quantile(x,0.75),0),sep="-")
is not a function, it is an expression.   ddplyr wants functions.


Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Tue, Apr 19, 2016 at 7:56 AM, Michael Artz <michaeleartz at gmail.com>
wrote:

> That didn't work Jim!
>
> Thanks anyway
>
> On Mon, Apr 18, 2016 at 9:02 PM, Jim Lemon <drjimlemon at gmail.com> wrote:
>
> > Hi Michael,
> > At a guess, try this:
> >
> > iqr<-function(x) {
> >
> return(paste(round(quantile(x,0.25),0),round(quantile(x,0.75),0),sep="-")
> > }
> >
> > .col3_Range=iqr(datat$tenure)
> >
> > Jim
> >
> >
> >
> > On Tue, Apr 19, 2016 at 11:15 AM, Michael Artz <michaeleartz at gmail.com>
> > wrote:
> > > Hi,
> > >   I am trying to show an interquartile range while grouping values
> using
> > > the function ddply().  So my function call now is like
> > >
> > > groupedAll <- ddply(data
> > >                  ,~groupColumn
> > >                  ,summarise
> > >                  ,col1_mean=mean(col1)
> > >                  ,col2_mode=Mode(col2) #Function I wrote for getting
> the
> > > mode shown below
> > >
> > >  ,col3_Range=paste(as.character(round(quantile(datat$tenure,c(.25)))),
> > > as.character(round(quantile(data$tenure,c(.75)))), sep = "-")
> > >                  )
> > >
> > > #custom Mode function
> > > Mode <- function(x) {
> > >   ux <- unique(x)
> > >   ux[which.max(tabulate(match(x, ux)))]
> > > }
> > >
> > > I am not sre what is going wrong on my interquartile range function, it
> > > works on its own outside of ddply()
> > >
> > >         [[alternative HTML version deleted]]
> > >
> > > ______________________________________________
> > > R-help at 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.
> >
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list