Dear Dennins,

Many thanks for you reply. Sorry for the convoluted loops, but I am starting to 
learn some programming and the loops are a bit complicated for me. Finally, a 
collegue help me with the code, and one code that works is like follow:

Pma<-rep (1:40)
P<-seq(1,4, 1)
Plot<-rep(P,10)
dbh2<-rnorm(40, mean=200, sd=5)
SBA2<-rnorm(40, mean=10, sd=1)

BAL2<-rep(0,length(Pma))

data<-data.frame(Pma,Plot,dbh2,SBA2,BAL2)

for (p in 1:length(unique(Plot))){ 
    index.stand<-which(data$Plot==p)  
    data.aux<-data[ index.stand , ] 
    result.aux<-numeric() 
    for (i in 1:length(data.aux$Pma)){
        result.aux[i] <-sum(data.aux$SBA2[which(data.aux$dbh2> data.aux[i , 
]$dbh2)]) }
        data$BAL2[ index.stand]<-result.aux 
        rm(data.aux)
        rm(result.aux) 
        }
data

Best,

Paloma

> Date: Thu, 21 Jul 2011 14:18:37 -0700
> Subject: Re: [R] nested loop for
> From: djmu...@gmail.com
> To: paloma_...@hotmail.com
> CC: r-help@r-project.org
> 
> Hi:
> 
> I *think* this is what you're after, but I get dizzy trying to read
> convoluted loops. Try this instead;
> 
> # Function to find the total SBA2 for all dbh2 larger than the given one:
> foo <- function(d) {
>     d <- d[order(d$dbh2), ]
>     d <- transform(d, BAL2 = sum(SBA2) - cumsum(SBA2))
>     d
>   }
> 
> library('plyr')
> ddply(kk, .(Plot), foo)
>    Pma Plot     dbh2      SBA2      BAL2
> 1   29    1 185.8568  9.055821 91.530165
> 2   33    1 186.4623 10.762347 80.767818
> 3    1    1 192.8324 10.741988 70.025830
> 4   17    1 196.2093  9.484601 60.541229
> 5   21    1 204.0971 11.389817 49.151412
> 6   13    1 204.5070  9.644655 39.506756
> 7    9    1 205.3079 11.014892 28.491864
> 8   25    1 206.5908 10.041878 18.449986
> 9    5    1 206.8110  8.602678  9.847307
> 10  37    1 211.1735  9.847307  0.000000
> ...
> 
> # If you want the groupwise sum in the output, use the following
> version instead:
> foo <- function(d) {
>     d <- d[order(d$dbh2), ]
>     d <- transform(d, BAL2 = sum(SBA2) - cumsum(SBA2),
>                                  aa = sum(SBA2))
>     d
>   }
> 
> HTH,
> Dennis
> 
> On Thu, Jul 21, 2011 at 4:13 AM, paloma ruiz benito
> <paloma_...@hotmail.com> wrote:
> >
> > Hi everyone,
> >
> > I have been working some days in a nested loop in R but I can't find the 
> > solution.
> >
> > I have a data.frame with an unique ID for individuals and unique ID for 
> > different stands, for each indiviadual I have a dbh record and a SBA (stand 
> > basal area) field.
> >
> > Pma<-rep (1:40)
> > P<-seq(1,4, 1)
> > Plot<-rep(P,10)
> > dbh2<-rnorm(40, mean=200, sd=5)
> > SBA2<-rnorm(40, mean=10, sd=1)
> >
> > As I want to calculate the basal area of larger trees in each stand (i.e., 
> > the compare tree to tree the dbh and for each individual sum the stand 
> > basal area of larger trees)
> >
> > BAL2<-rep(0,length(Pma))
> > aa<-rep(0,length(Pma))
> >
> > Now I have programed a for loop to do this calculation, and one plot it 
> > works quite well:
> >
> > kk<-data.frame(Pma, Plot, dbh2, SBA2, BAL2, aa)
> > kkk<-kk[kk$Plot=="1",]
> >
> >
> > The loop:
> >
> >        for(j in 1:length(kkk$Pma)){
> >            for(i in 1:length(kkk$Pma)){
> >                if(kkk$dbh2[j]<kkk$dbh2[i])
> >                kkk$aa[i]<-kkk$SBA2[i]
> >                else temp_data$aa[i]<-0
> >                kkk$BAL2[j]<-sum(kkk$aa)
> >    }
> >    }
> >
> > But, I have tried a million of forms to calculate this for each stand... 
> > and no one looks fine. The closest code that I have got is:
> >
> > for(k in 1:length(kk)){
> >    temp_data<-kk[kk$Plot==Plot[k],]
> >
> >        for(j in 1:length(temp_data$Pma)){
> >    #I have selected the individuals to calculate the BAL in each plot
> >            for(i in 1:length(temp_data$Pma)){
> >                if(temp_data$dbh2[j]<temp_data$dbh2[i])
> >                temp_data$aa[i]<-temp_data$SBA2[i]
> >                else temp_data$aa[i]<-0
> >                temp_data$BAL2[j]<-sum(temp_data$aa)
> >
> >
> >    }
> >
> >    ###Some suggestion to "save" the temporal data of each stand and group 
> > it together
> >    }
> >
> > }
> >
> > Any advise or suggestion will be very welcome,
> >
> > Thanks in advance,
> >
> > Paloma
> >
> >
> >        [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > 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.
> >
                                          
        [[alternative HTML version deleted]]

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

Reply via email to