> tstdf <- data.frame(Sub =rep(1:2, 2),
+  Length=1:4, Slope=11:14)
> by(tstdf, tstdf$Sub,
+  function(x)weighted.mean(x$Slope, x$Length))
tstdf$Sub: 1
[1] 12.5
------------------------------------------------------------
tstdf$Sub: 2
[1] 13.33333
>
Does this answer your question?

hth. spencer graves

Aleksey Naumov wrote:
Dear R users, I have a question on using weighted.mean() while aggregating a data frame. I have a data frame with columns Sub, Length and Slope:


x[1:5,]

Sub Length Slope 1 2 351.547 0.0025284969 2 2 343.738 0.0025859390 3 1 696.659 0.0015948968 4 2 5442.338 0.0026132544 5 1 209.483 0.0005304225

and I would like to calculate the weighted.mean of Slope, using Length as weights, for each value of Sub. The obvious way:


aggregate(list(Mean.Slope=x$Slope), by=list(Sub=x$Sub), FUN=weighted.mean,

w=x$Length)


does not work. weighted.mean() generates warnings that "longer object length is not a multiple of shorter object length in: x * w", from which I conclude that weights are not supplied as I intend, instead each subset of Sub, when passed to weighted.mean(), receives the whole x$Length as weights, which is not correct.

Is there an elegant way to do this, or do I have to have a loop here?

Thank you,
Aleksey


______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help

Reply via email to