[R] coefficients lm of data.frame

Dennis Murphy djmuser at gmail.com
Fri Jul 8 00:24:40 CEST 2011


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)
names(dfr) <- c('x', 'y', 'intercept', 'slope')
dfr

HTH,
Dennis

On Thu, Jul 7, 2011 at 7:09 AM, Alfredo Alessandrini
<alfreale74 at gmail.com> wrote:
> Hi,
>
> I've a data frame like this:
>
>> as.data.frame(cbind(rnorm(1:12),rnorm(1:12)))
>            V1          V2
> 1  -1.30849402 -0.52094136
> 2 0.96157302  0.76217871
> 3 -0.44223351 -1.72630871
> 4  -0.10432438 -1.04732942
> 5 -1.38748914  0.95877311
> 6 -0.63965975  0.65494811
> 7 -0.24058318  0.19496830
> 8  -0.11172988  1.01680655
> 9 0.08065333  0.22168589
> 10  0.25196536  0.84619914
> 11 -0.59536986 -0.08243074
> 12 1.09115054  0.49822977
>
> I need to add two columns as result of the fitting of linear model
> based on a preset numbers of row.
>
> For example if I need to compute a lm each 4 rows, I get the
> data.frame below, where intercept1 and coeff1 is obtained from V1 and
> V2 of first 4 rows lm(V2 ~ V1), and so on...
>
>
>      V1          V2 "intercept" "coeff"
> 1   0.6931694  0.05797771   intercept1   coeff1
> 2  -1.4069786  0.23983307   intercept1  coeff1
> 3  -1.4901708  0.45079601   intercept1   coeff1
> 4   0.2215696  1.87888983   intercept1   coeff1
> 5  -0.5828106  0.90376622   intercept2   coeff2
> 6  -0.7607985  0.71419938   intercept2   coeff2
> 7   0.1273495  0.06199312   intercept2   coeff2
> 8  -0.5612245  1.02223971   intercept2  coeff2
> 9  -0.1439178  0.92135354   intercept3   coeff3
> 10 -1.1011662  0.02894731   intercept3   coeff3
> 11 -0.4098710 -0.01231322   intercept3   coeff3
> 12  1.1511811 -0.63923140   intercept3   coeff3
>
>
> Thanks in advance,
>
> Alfredo
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list