[R] How to run lm for each subset of the data frame, and then aggreage the result?

arun smartpink111 at yahoo.com
Sun May 19 18:10:25 CEST 2013

May be this helps:

dat1<- data.frame(age=sample(30:70,120,replace=TRUE),income=sample(40000:80000,120,replace=FALSE),country=rep(c("USA","GB","France"),each=40),stringsAsFactors=FALSE)
 ldply(dlply(dat1,.(country),lm,formula=income~0+age),function(x) coef(x))
#  country      age
#1  France 1127.192
#2      GB 1194.586
#3     USA 1161.795
do.call(rbind,lapply(split(dat1,dat1$country),function(x) coef(with(x,lm(income~0+age)))))
#            age
#France 1127.192
#GB     1194.586
#USA    1161.795
 do.call(rbind,lapply(unique(dat1$country),function(x) {subframe<- dat1[which(dat1$country==x),]; fit<- lm(income~0+age,data=subframe); Coef1<-data.frame(age=coef(fit)); row.names(Coef1)<-x; Coef1}))
#            age
#USA    1161.795
#GB     1194.586
#France 1127.192

----- Original Message -----
From: "CHEN, Cheng" <chencheng at gmail.com>
To: R-help at r-project.org
Sent: Sunday, May 19, 2013 8:31 AM
Subject: [R] How to run lm for each subset of the data frame,
 and then aggreage the result?

Hi gurus,

I have a big data frame df, with columns named as :

age, income, country

what I want to do is very simpe actually, do

    fit<-lm(income~0+age, data=subframe);

for each individual country. Then aggregate the result into a new data
frame looks like :

    countryname,  coeffname1      USA         1.22      GB
1.03      France      1.1

I tried to do :
do.call("rbind", lapply(countries, fitFunc))

but this only gives something like:

[1,] 2.540879
[2,] 2.428830
[3,] 2.369560
How should I proceed?

can anyone help?

*CHEN*, Cheng

    [[alternative HTML version deleted]]

R-help at r-project.org mailing list
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