[R] Help rewriting looping structure?

Erik Iverson iverson at biostat.wisc.edu
Thu Dec 6 19:20:19 CET 2007


How about this example?

## sample data frame with two columns
df <- data.frame(x = abs(rnorm(20)), y=abs(rnorm(20,2)))

## create new variables in df with an lapply call
df[c("cpctx","cptcty")] <- lapply(df, function(x) cumsum(x)/sum(x))

A possible improvement would be to construct the new column names in
the data frame automatically.

Best,
Erik
TLowe wrote:
> Hey Folks,
> 
> Could somebody help me rewrite the following code?
> 
> I am looping through all records across 5 fields to calculate the cumulative
> percentage of each record (relative to each individual field).
> 
> Is there a way to rewrite it so I don't have to loop through each individual
> record?
> 
> ##### tdat is my data frame
> ##### j is my field index
> ##### k is my record index
> ##### tsum is the sum of all values in field j
> ##### tmp is a vector containing the values in field j
> ##### tdat[k,paste("cpct,j,sep="")] creates new fields "cpct1",...,"cpct5" 
> 
> 
> for(j in 1:5) {
>   tsum<- sum(tdat[,j]);
>   for(k in 1:nrow(tdat)) {
>     td<- tdat[k,j];
>     tmp<-tdat[,j];
> ##### sum values <= to current value and divide by the total sum
>     tdat[k,paste("cpct,j,sep="")]<- sum(tmp[tmp <= td]) / tsum;
>   }
> }
> 
> 
> Thanks,
> TLowe



More information about the R-help mailing list