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.