不同行的加权平均值

时间:2018-02-20 11:15:30

标签: r dplyr

我有一个包含三个变量的数据框,如下所示:

variable <- c("A", "B", "C", "B", "B", "A", "C")
mean <- c(2,4,5,4,3,1,5)
counts <- c(100, 200, 300, 150, 400, 200,250)

df <- data.frame(variable, mean, counts)

我想将mean乘以counts的数量,并按variable添加它们。然后我想将结果除以countsvariable的数量。对于variable A

,结果应如下所示

(2 * 100 + 1 * 200)/ 300 = 1.333333

然后我想按照variable中的group_bysummarise功能,按dplyr汇总结果。任何想法如何运作?我尝试使用group_by和mutate,但没有聚合。结果应如下所示:

Variable     Mean
A         some value
B         some value
C         some value

2 个答案:

答案 0 :(得分:3)

这样可以工作 - 您只需要指定计算,因为对mean的调用当然会除以计数(例如,第一个调用为2)     库(tidyverse)

df %>% 
  mutate(multiple = mean * counts) %>% 
  group_by(variable) %>% 
  summarise(mean = sum(multiple) / sum(counts))

答案 1 :(得分:2)

library(plyr)
ddply(.data = df,.variables = c('variable'),
    function(x){sum(x$mean*x$counts)/sum(x$counts)})