I have a data frame, lets call it dat, with 3 columns ( mc, yr, ret) which represent market cap, year, and return. mc is a factor, mc, and ret are real numbers.
I want to add a column to the data calculated as follows. For each year, I want to split the data by mc decile, then calculate the mean ret within that mc decile, and finally subtract that year's decile mean from the raw return. Then I want that mean adjusted ret to be the new column. I can get the market cap deciles with my.cut <- function(x) { cut( x, quantile( x, probs=seq(0,1,0.1), na.rm=TRUE)) } mc.deciles <- by( dat$mc, dat$yr, my.cut) I don't know how to associate the values in mc.deciles with a particular row of the original data frame dat. I don't think I can unlist mc.deciles because the order won't be the same. If I could append mc.deciles as a new column to dat, then I could do something like by( dat$ret, list( dat$yr, dat$decile), mean) In which case I would still be faced with finding the right mean to subtract from each entry in dat$ret. Maybe I'm just stuck on by() and cut() when there is an easier way to handle this. Any suggestions? Thanks. ______________________________________________ R-help@stat.math.ethz.ch 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.