Re: [R] Loop problem

From: Jim Lemon <jim_at_bitwrit.com.au>
Date: Thu, 27 Mar 2008 21:36:11 +1100

Jamie Ledingham wrote:
> Dear all, I have a problem with a loop, if anyone has any knowledge on
> these things I would appreciate some comments. The code below is
> designed to allow me to extract the top record of the data frame, and
> them remove rows from the data frame which have an index close to the
> extracted top record.
>
>
> topstorm<-subset(rankeddataset[1,]) ## Extracts the top storm
> topstormindex<-rankeddataset[1,1] ## Finds the top storm start index
> startindex<-topstormindex-48 ## sets the start and end indexes
> endindex<-topstorminde+48
> rankeddataset<-rankeddataset[-1,] ## Creates a new list with the top
> storm removed
>
> ##This section of code needs looped. It removes storms from the list
> which are too close to the extracted storm
>
> for (i in 1:30){
> if (rankeddataset[i,1]>startindex && rankeddataset[i,1]<endindex)
> {rankeddataset<-rankeddataset[-i,]}
> }
>
> Here is some example data:
>
> 82856 15 / 6 / 1966 82856:82879 25.9
> 82857 15 / 6 / 1966 82857:82880 20.5
> 83036 23 / 6 / 1966 83036:83059 17.3
> 87250 15 / 12 / 1966 87250:87273 15.9
>
Hi again Jamie,
I had a bit of time tonight and recognized your problem. I think the following function will do what you want, although it is probably not the most elegant solution. I would check it manually with a small data file and a small "howmany" argument to make sure that it is picking up the maxima you want.

find.max.rain<-function(raindata,howmany) {   # a lazy way of getting the same structure as raindata   # it assumes that raindata has the data structure that you want   maxrain<-raindata[1:howmany,]
  for(i in 1:howmany) {
   # get the current number of rows
   nrows<-dim(raindata)[1]
   # find the first maximum value
   thismax<-which.max(raindata$cumrain)
   # transfer it to the return data frame    maxrain[i,]<-raindata[thismax,]
   # calculate the minimum index for the 48 hour gap    mindex<-thismax-48
   # make sure it is at least 1
   if(mindex < 1) mindex <- 1
   # calculate the maximum index for the gap    maxdex<-thismax+48
   # make sure it doesn't go past the end of the data frame    if(maxdex > nrows) maxdex<-nrows
   # chop out that time period
   raindata<-raindata[-(mindex:maxdex),]   }
  return(maxrain)
}

Jim



R-help_at_r-project.org mailing list
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. Received on Thu 27 Mar 2008 - 14:16:03 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 27 Mar 2008 - 14:30:24 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive