Skip to content
Prev 33617 / 398506 Next

Using weighted.mean() in aggregate()

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:
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:
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