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