If you want to accept maxima at the ends of the series, append -Inf to each end and subtract one from the result. Note that this will make even a constant sequence have a local maximum at 1.
On Mon, Mar 29, 2021 at 6:52 AM Stefano Sofia <stefano.so...@regione.marche.it> wrote: > > Dear Bill, Bert, Greg and Abby, > I tested your code (honestly apart from Abby's solution because it needed an > additional package and I run R in a server which is not administrated by > myself), they work and I found them equivalent. (Probably Bill's and Greg's > solutions are a bit faster than Bert's.) > > In my real application I found a case where none of them work: when the > series is monotonic. In this case the last number of the vector (or the last > duplicated numbers) is not a maximum but it is anyway the highest number of > the vector: > > >x <- c(1,1,1,2,2,3,4,4,4,5,6,6,6) > > The error is: argument is of length zero. > Your code is at the moment too complicated for me to modify. I ask if there > is an "easy" extension of the code that you kindly wrote for me to handle > also this possibility. > > Thank you for everything > Stefano > > > > (oo) > --oOO--( )--OOo-------------------------------------- > Stefano Sofia PhD > Civil Protection - Marche Region - Italy > Meteo Section > Snow Section > Via del Colle Ameno 5 > 60126 Torrette di Ancona, Ancona (AN) > Uff: +39 071 806 7743 > E-mail: stefano.so...@regione.marche.it > ---Oo---------oO---------------------------------------- > > ________________________________________ > Da: Bill Dunlap [williamwdun...@gmail.com] > Inviato: venerdì 26 marzo 2021 18.40 > A: Stefano Sofia > Cc: r-help mailing list > Oggetto: Re: [R] local maxima positions in a vector with duplicated values > > Using rle() may make it easier - finding the peak values is easier and > select from cumsum(lengths) to get the positions of the last values > before the peaks, then add 1. I have not tested the following very > much. > > function(x) { > rx <- rle(x) > cumsum(rx$lengths)[c(diff(diff(rx$values)>0) == -1,FALSE,FALSE)]+1 > } > > -Bill > > On Fri, Mar 26, 2021 at 8:36 AM Stefano Sofia > <stefano.so...@regione.marche.it> wrote: > > > > Dear list users, > > I need to find local maxima and local minima positions in a vector where > > there might be duplicates; in the particular in case of > > - duplicated local maxima, I should take the position of the first > > duplicated value; > > - duplicated local minima, I should take the position of the last > > duplicated value. > > > > Example: > > > > >x <- c(1,0,0,0,2,2,3,4,0,1,1,0,5,5,5,0,1) > > >which(diff(diff(x)>=0)<0)+1 > > > > gives me 8 11 15 while I need 8 10 13; > > > > >which(diff(diff(x)>0)>0)+1 > > > > gives me 4 6 9 12 16 while I need 4 9 12 16. > > > > Could you please help me in this task? I would be happier not to use > > additional packages. > > > > Thank you for your precious help > > Stefano > > > > > > (oo) > > --oOO--( )--OOo-------------------------------------- > > Stefano Sofia PhD > > Civil Protection - Marche Region - Italy > > Meteo Section > > Snow Section > > Via del Colle Ameno 5 > > 60126 Torrette di Ancona, Ancona (AN) > > Uff: +39 071 806 7743 > > E-mail: stefano.so...@regione.marche.it > > ---Oo---------oO---------------------------------------- > > > > ________________________________ > > > > AVVISO IMPORTANTE: Questo messaggio di posta elettronica può contenere > > informazioni confidenziali, pertanto è destinato solo a persone autorizzate > > alla ricezione. I messaggi di posta elettronica per i client di Regione > > Marche possono contenere informazioni confidenziali e con privilegi legali. > > Se non si è il destinatario specificato, non leggere, copiare, inoltrare o > > archiviare questo messaggio. Se si è ricevuto questo messaggio per errore, > > inoltrarlo al mittente ed eliminarlo completamente dal sistema del proprio > > computer. Ai sensi dell’art. 6 della DGR n. 1394/2008 si segnala che, in > > caso di necessità ed urgenza, la risposta al presente messaggio di posta > > elettronica può essere visionata da persone estranee al destinatario. > > IMPORTANT NOTICE: This e-mail message is intended to be received only by > > persons entitled to receive the confidential information it may contain. > > E-mail messages to clients of Regione Marche may contain information that > > is confidential and legally privileged. Please do not read, copy, forward, > > or store this message unless you are an intended recipient of it. If you > > have received this message in error, please forward it to the sender and > > delete it completely from your computer system. > > > > -- > > Questo messaggio stato analizzato da Libraesva ESG ed risultato non > > infetto. > > This message was scanned by Libraesva ESG and is believed to be clean. > > > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > > > > https://urlsand.esvalabs.com/?u=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fr-help&e=5a635173&h=06ff70f3&f=y&p=y > > PLEASE do read the posting guide > > https://urlsand.esvalabs.com/?u=http%3A%2F%2Fwww.R-project.org%2Fposting-guide.html&e=5a635173&h=e12f63e8&f=y&p=y > > and provide commented, minimal, self-contained, reproducible code. > > -- > > Questo messaggio stato analizzato con Libraesva ESG ed risultato non > infetto. > > > ________________________________ > > AVVISO IMPORTANTE: Questo messaggio di posta elettronica può contenere > informazioni confidenziali, pertanto è destinato solo a persone autorizzate > alla ricezione. I messaggi di posta elettronica per i client di Regione > Marche possono contenere informazioni confidenziali e con privilegi legali. > Se non si è il destinatario specificato, non leggere, copiare, inoltrare o > archiviare questo messaggio. Se si è ricevuto questo messaggio per errore, > inoltrarlo al mittente ed eliminarlo completamente dal sistema del proprio > computer. Ai sensi dell’art. 6 della DGR n. 1394/2008 si segnala che, in caso > di necessità ed urgenza, la risposta al presente messaggio di posta > elettronica può essere visionata da persone estranee al destinatario. > IMPORTANT NOTICE: This e-mail message is intended to be received only by > persons entitled to receive the confidential information it may contain. > E-mail messages to clients of Regione Marche may contain information that is > confidential and legally privileged. Please do not read, copy, forward, or > store this message unless you are an intended recipient of it. If you have > received this message in error, please forward it to the sender and delete it > completely from your computer system. > > -- > Questo messaggio stato analizzato da Libraesva ESG ed risultato non infetto. > This message was scanned by Libraesva ESG and is believed to be clean. > ______________________________________________ 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.