2016-06-28 66 views
1

我具有低于添加加权平均与骨料

library(ggplot2) 
v = c(100,50,50,20,30,100,100,100,40,5) 
s = c(1,10, 5, 90,40, 100, 1,1,30,5) 
g = c(rep("A",5),rep("B",5)) 
m = c (1,1,5,5,10, 10,10,8,5,2) 
d = data.frame(value = v, size= s, group = g, m = m) 
d 
a = aggregate(d$v, by = list(d$m, d$g), FUN= mean) 
a 
ggplot(data=a, aes(x=Group.1, y=x, group=Group.2)) + 
    geom_line()+geom_point() 

()中的数据帧目前骨料采取每个“g”和“M”组内的平均“V”。

取代简单的平均值,我想用“s”和“g”和“m”作为权重来绘制加权平均值。例如,当g = A和m = 1时,合计返回75,即平均值为100,但我想返回加权平均值(100 * 1 + 50 * 10)/ 11 = 54.

最好的办法是什么?

谢谢

回答

1

我们可能会使用dplyr

library(dplyr) 
d %>% 
    group_by(m, group) %>% 
    summarise(vmean = floor(weighted.mean(value, size))) 
#  m group vmean 
# <dbl> <fctr> <dbl> 
#1  1  A 54 
#2  2  B  5 
#3  5  A 21 
#4  5  B 40 
#5  8  B 100 
#6 10  A 30 
#7 10  B 100 

或者使用base R

by(d[c("value", "size")], list(d$group, d$m), 
      FUN = function(x) weighted.mean(x[,1], x[,2]))