Re: [R] nested loop for

2011-07-22 Thread paloma ruiz benito

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   291 185.8568  9.055821 91.530165
 2   331 186.4623 10.762347 80.767818
 311 192.8324 10.741988 70.025830
 4   171 196.2093  9.484601 60.541229
 5   211 204.0971 11.389817 49.151412
 6   131 204.5070  9.644655 39.506756
 791 205.3079 11.014892 28.491864
 8   251 206.5908 10.041878 18.449986
 951 206.8110  8.602678  9.847307
 10  371 211.1735  9.847307  0.00
 ...
 
 # 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.


[R] nested loop for

2011-07-21 Thread paloma ruiz benito

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.