Loop problem
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