2016-06-28 94 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]))