[R] coefficients lm of data.frame

Hadley Wickham hadley at rice.edu
Fri Jul 8 00:35:37 CEST 2011


On Thu, Jul 7, 2011 at 5:24 PM, Dennis Murphy <djmuser at gmail.com> wrote:
> Hi:
>
> Here's another approach using the plyr package:
>
> library(plyr)
> df <- data.frame(gp = factor(rep(1:3, each = 4)), x = rnorm(12), y = rnorm(12))
> mylst <- split(df, df$gp)
> mycoefs <-  ldply(mylst, function(d) coef(lm(y ~ x, data = d)))
> names(mycoefs) <- c('gp', 'intercept', 'slope')
> merge(df, mycoefs, by = 'gp', all.x = TRUE)
>
> One could write this more compactly as
>
> dfr <- merge(df, ldply(split(df, df$gp), function(d) coef(lm(y ~ x, data = d))),
>                     by.x = 'gp', by.y = '.id', all.x = TRUE)

Or even more compactly as

dfr <- merge(df, ddply(df, "gp", function(d) coef(lm(y ~ x, data = d))),
                    by.x = 'gp', by.y = '.id', all.x = TRUE)

Hadley


-- 
Assistant Professor / Dobelman Family Junior Chair
Department of Statistics / Rice University
http://had.co.nz/



More information about the R-help mailing list