Dear Spencer:
In the following example, your code doesn't pick up the local mode at 5.
> x2 <- c(1,1,2,3,3,3,3,5,5,5)
> modes(x2)
[1] 1 3
In this example, it gives a mode at 7, which is incorrect.
> x2 <- c(1,1,2,3,3,3,3,5,5,5,6,7)
> modes(x2)
[1] 1 3 7
Ravi.
----- Original Message -----
From: Spencer Graves <spencer.graves at pdf.com>
Date: Monday, June 23, 2003 2:53 pm
Subject: Re: [R] Summary for mode of a data set
> Your "mode1" function will identify multiple modes only if they
> have the
> same number of observations. Consider the following:
>
> > x2 <- c(2, 1,1, 3,3,3)
> > mode1(x2)
> [1] 3
>
> Here, "mode1" did not identify the local mode at 1, because it
had
> fewer
> observations than 3. If you want the modes at both 1 and 3, then
> consider the following:
>
> modes <- function(x){
> xt <- table(x)
> nt <- length(xt)
> sel <- c(xt[-nt]>=xt[-1], T)&c(T, xt[-1]>=xt[-nt])
> as.numeric(names(xt[sel]))
> }
> > modes(x2)
> [1] 1 3
>
> hth. spencer graves
>
> Erin Hodgess wrote:
> > Dear R People:
> >
> > thank you for the many helpful sets of code that I received!!!
> >
> > I combined several of the concepts for the following function:
> >
> >
> >>mode1
> >
> >
> > function(x) {
> >
> > y <- rle(sort(x))
> >
> > z <- y$values[y$lengths==max(y$lengths)]
> >
> > return(z)
> >
> > }
> >
> >
> >>xm
> >
> >
> > [1] 22 15 10 30 25 26 2 17 28 2 24 6 26 24 5 22 20 14
> >
> >
> >>mode1(xm)
> >
> >
> > [1] 2 22 24 26
> >
> >
> >
> > This will pick up multiple modes.
> >
> > Again thanks to all who helped!
> >
> > Sincerely,
> > Erin
> > mailto: hodgess at uhddx.01.dt.uh.edu
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>