回复 第1楼 的 fnlong:
用plyr包可以解决这个问题
<br />
> names(ll)<-c("f","d","l")<br />
> ll<br />
f d l<br />
1 cs01 2300 3<br />
2 cs01 2300 3<br />
3 cs01 100 3<br />
4 cs02 4300 4<br />
5 cs02 1400 5<br />
6 cs03 2400 5<br />
7 cs03 1100 4<br />
8 cs03 2400 5<br />
9 cs04 1200 2<br />
> library(plyr)<br />
> ddply(ll, .(f), function(x) {round(sum(x$d*x$l)/sum(x$d),3)})<br />
f V1<br />
1 cs01 3.000<br />
2 cs02 4.246<br />
3 cs03 4.814<br />
4 cs04 2.000<br />
</p>