you could try something along these lines:
data <- data.frame(y = rnorm(100), group = rep(1:10, each = 10))
data$sum <- ave(data$y, data$group, FUN = sum)
data$norm.y <- data$y / data$sum
data
I hope it helps.
Best,
Dimitris
Noah Silverman wrote:> Hi,
>
> I'm trying to normalize some data.
> My data is organized by groups. I want to normalize PER GROUP as
> opposed to over the entire data set.
>
> The current double loop that I'm using takes almost an hour to run on
> about 30,000 rows of data in 2,500 groups.
>
> I'm currently doing this:
>
> -------------------------------------
> for(group in unique(data$group)){
> sum_V1 <- sum(data$V1[data$group == group])
>
> for(subject in data$subject[data$group == group]){
> data$V1_norm[(data$group == group & data$subject == subject)]
<-
> data$V1[(data$group == group & data$subject == subject)] / sum_V1
> }
> }
> -------------------------------------
>
> Can anyone point me to a faster way to do this in R.
>
> Thanks!
>
> -N
>
> ______________________________________________
> R-help at 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.
>
--
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center
Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014