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
Hi
divide and conquer
Split your data frame to required portions
dat<-as.data.frame(cbind(rnorm(1:12),rnorm(1:12)))
dat.s<-split(dat, rep(1:4, each=3))
apply lm to each portion
sapply(dat.s, function(x) coef(lm(V2~V1, x)))
1 2 3 4
(Intercept) 1.21745328 -0.7783777 -0.1736094 0.1042114
V1 0.03639838 2.6203724 1.3167433 -0.2350888
Add those values to your data frame.
hint: use rep(..., each=4)
Regards
Petr
r-help-bounces at r-project.org napsal dne 07.07.2011 16:09:51:
> Alfredo Alessandrini <alfreale74 at gmail.com>
> Odeslal: r-help-bounces at r-project.org
>
> 07.07.2011 16:09
>
> Komu
>
> r-help at r-project.org
>
> Kopie
>
> P?edm?t
>
> [R] coefficients lm of data.frame
>
> 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.
An embedded message was scrubbed... From: "Filipe Leme Botelho" <filipe.botelho at vpar.com.br> Subject: RES: [R] coefficients lm of data.frame Date: Thu, 7 Jul 2011 14:20:12 -0300 Size: 3707 URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110707/9c10f46a/attachment.mht> -------------- next part -------------- "This message and its attachments may contain confidential and/or privileged information. If you are not the addressee, please, advise the sender immediately by replying to the e-mail and delete this message." "Este mensaje y sus anexos pueden contener informaci?n confidencial o privilegiada. Si ha recibido este e-mail por error por favor b?rrelo y env?e un mensaje al remitente." "Esta mensagem e seus anexos podem conter informa??o confidencial ou privilegiada. Caso n?o seja o destinat?rio, solicitamos a imediata notifica??o ao remetente e exclus?o da mensagem."
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.
>