[R] many weighted means: is there a simpler way?

Charles C. Berry cberry at tajo.ucsd.edu
Sun Oct 11 18:57:20 CEST 2009


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



More information about the R-help mailing list