Sorry, internet's not working properly today.
Third time lucky....

Here's a solution to your original question:

---------
freq <- c (1,2,5,5,10,4,4,8,1,1,8,8,2,4,3,1,2,1,1,138,149,14,1,1)

unique.consecutive <- function (x)
{   dx <- diff (x)
    x [dx != 0]
}

which.maxs <- function (x, ..., include.endpoints=FALSE)
{   dx <- diff (x)
    if (any (dx == 0) )
    stop ("function needs unique-consecutive values")
    ndx <- length (dx)
    I <- c (FALSE, dx [-ndx] > 0 & dx [-1] < 0, FALSE)
    if (include.endpoints)
    {   I [1] <- (dx [1] < 0)
        I [ndx + 1] <- (dx [ndx] > 0)
    }
    which (I)
}

freq.sub <- unique.consecutive (freq)
maxv <- freq.sub [which.maxs (freq.sub, include.endpoints=TRUE)]

maxv
unique (maxv)
---------

Some comments:

My package, probhat, contains early prototype-quality functions for
discrete kernel smoothing.
This can be used to "smooth" frequency data.
Which in turn, can eliminate spurious modes.

https://cran.r-project.org/web/packages/probhat/vignettes/probhat.pdf

Unfortunately, bandwidth selection is manual.
Also note that currently it only returns probability mass (not frequency)
but it's very easy to to get frequency from probability mass.

I'm planning to resume work on this package in two to three days, so I'm
open to suggestions...

        [[alternative HTML version deleted]]

______________________________________________
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.

Reply via email to