[R] Create variables with common values for each group

Dimitris Rizopoulos dimitris.rizopoulos at med.kuleuven.be
Tue Jun 20 11:03:16 CEST 2006


you can use something like:

dat <- data.frame(hhid = rep(c(10010020, 10010126, 10010142, 
10010150), c(2, 2, 3, 3)), h.age = sample(18:50, 10, TRUE))
###########
dat$mean.age <- rep(tapply(dat$h.age, dat$hhid, mean), 
tapply(dat$h.age, dat$hhid, length))
dat


I hope it helps.

Best,
Dimitris

----
Dimitris Rizopoulos
Ph.D. Student
Biostatistical Centre
School of Public Health
Catholic University of Leuven

Address: Kapucijnenvoer 35, Leuven, Belgium
Tel: +32/(0)16/336899
Fax: +32/(0)16/337015
Web: http://med.kuleuven.be/biostat/
     http://www.student.kuleuven.be/~m0390867/dimitris.htm


----- Original Message ----- 
From: "Stephan Lindner" <lindners at umich.edu>
To: <r-help at stat.math.ethz.ch>
Sent: Tuesday, June 20, 2006 10:42 AM
Subject: [R] Create variables with common values for each group


> Dear all,
>
> sorry, this is for sure really basic, but I searched a lot in the
> internet, and just couldn't find a solution.
>
> The problem is to create new variables from a data frame which
> contains both individual and group variables, such as mean age for 
> an
> household. My data frame:
>
>
>
> df
>
>       hhid h.age
> 1  10010020    23
> 2  10010020    23
> 3  10010126    42
> 4  10010126    60
> 5  10010142    20
> 6  10010142    49
> 7  10010142    52
> 8  10010150    18
> 9  10010150    51
> 10 10010150    28
>
>
> where hhid is the same number for each household, h.age the age for
> each household member.
>
> I tried tapply, by(), and aggregate. The best I could get was:
>
> by(df, df$hhid, function(subset) 
> rep(mean(subset$h.age,na.rm=T),nrow(subset)))
>
> df$hhid: 10010020
> [1] 23 23
> ------------------------------------------------------------ 
> df$hhid: 10010126
> [1] 51 51
> ------------------------------------------------------------ 
> df$hhid: 10010142
> [1] 40.33333 40.33333 40.33333
> ------------------------------------------------------------ 
> df$hhid: 10010150
> [1] 32.33333 32.33333 32.33333
>
>
> Now I principally only would have to stack up the mean values, and
> this is where I'm stucked. The function aggregate works nice, and I
> could loop then, but I was wondering whether there is a better way 
> to
> do that.
>
> My end result should look like this (assigning mean.age to the data 
> frame):
>
>
>
>       hhid h.age  mean.age
> 1  10010020    23     23.00
> 2  10010020    23     23.00
> 3  10010126    42     51.00
> 4  10010126    60     51.00
> 5  10010142    20     40.33
> 6  10010142    49     40.33
> 7  10010142    52     40.33
> 8  10010150    18     32.33
> 9  10010150    51     32.33
> 10 10010150    28     32.33
>
>
>
> Cheers, and thanks a lot,
>
>
> Stephan Lindner
>
>
>
>
> -- 
> -----------------------
> Stephan Lindner, Dipl.Vw.
> 1512 Gilbert Ct., V-17
> Ann Arbor, Michigan 48105
> U.S.A.
> Tel.: 001-734-272-2437
> E-Mail: lindners at umich.edu
>
> "The prevailing ideas of a time were always only the ideas of the
> ruling class" -- Karl Marx
>
> ______________________________________________
> R-help at 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
> 


Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm



More information about the R-help mailing list