On Sun, 11 Oct 2009, Ozan Bak???~_ wrote:
> Hi R-users,
>
> I would like to calculate weighted mean of several
> variables by two factors where the weight vector is
> the same for all variables.
>
> Below, there is a simple example where I have only two
> variables: "v1","v2" both weighted by "wt"
and my factors
> are "gender" and "year".
>
> set.seed(1)
> df <- data.frame(gender = rep(c("M", "F"),each = 5),
> year = rep(c(1999, 2000), 5), v1 = rnorm(10,10),
> v2 = rnorm(10,6), wt = runif(10))
> df
> g <- function(x) weighted.mean(x[, 1], x[, 2])
>
by(df[,c("v1","wt")],df[,c("year","gender")],g)
>
> I can use as above by command for each variable (v1,v2)
> separately but I wonder if there is some simpler way
> that yields a table/data frame of weigted means for all
> "vi"s where i=1...N.
>
This is R; There are lots of ways.
Here is one:
> lm( cbind( v1, v2 ) ~ 0 + gender:factor(year), df, weight=wt)
Call:
lm(formula = cbind(v1, v2) ~ 0 + gender:factor(year), data = df,
weights = wt)
Coefficients:
v1 v2
genderF:factor(year)1999 10.573 6.795
genderM:factor(year)1999 9.534 6.633
genderF:factor(year)2000 9.741 6.422
genderM:factor(year)2000 10.834 5.190
HTH,
Chuck
> Thank you very much,
> ozan
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>
Charles C. Berry (858) 534-2098
Dept of Family/Preventive Medicine
E mailto:cberry at tajo.ucsd.edu UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901