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@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

______________________________________________
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