Dear List: I am wondering if there is a more efficient way to compute the following. For the example I am using the star data frame in the mlmRev package. This has 80 schools and includes grades K, 1, 2, and 3. First I compute the grade level mean in each school using tapply as: tapply(star$math, list(star$sch,star$gr), mean, na.rm=T) This results in a table of means by school for each grade. Now, I want to add additional columns that include the grand mean of all schools (for each grade) excluding the school in that column. So, in row 1 (school 1) there would be the grand mean across all other schools 79 except for school 1 for each grade. The second row would contain the means for all schools except for school 2 and so on. Now, I have this working via a loop that chunks up the data and returns some vectors which I then add to the dataframe. However, this takes a while and I think it may not be efficient. The sweep function seems as though it might be one avenue as it is designed to sweep out a statistic. Or, is there another method that might be more effective than subsetting multiple dataframes inside a loop. I am having trouble conceiving how this might be accomplished without having to construct a loop. Thank you for any thoughts, Harold [[alternative HTML version deleted]]