如何在summarise_if中创建加权平均值

时间:2017-08-25 12:46:32

标签: r dplyr

我有一个数据框,其中包含每个公司的一行,包含不同的变量(有些是数字,有些则不是):

    data <- data.frame(id=1:5,
                 CA = c(1200,1500,1550,200,0),
                 EBE = c(800,50,654,8555,0),
                 VA = c(6984,6588,633,355,84),
                 FBCF = c(35,358,358,1331,86),
                 name=c("qsdf","xdwfq","qsdf","sqdf","qsdfaz"),
                 weight = c(1, 5, 10,1 ,1))

我想用加权和来概括所有数字变量。如果我想要一个简单的总和,我会这样做:

data %>% summarise_if(is.numeric,sum)

但我不知道如何定义加权和。

我试过了:

w.sum <- function(x) {sum(x*weight) %>% return()}

但没有任何成功。

1 个答案:

答案 0 :(得分:1)

我们可以在funs

中使用它
data %>%
   summarise_if(is.numeric, funs(sum(.*weight)))

请注意,上述内容基于以下条件:如果列为numeric类。根据示例,“id”列为numeric,可能不需要summarise。更好的选择是summarise_at来指定感兴趣的列

data %>%
  summarise_at(names(.)[2:5], funs(sum(.*weight)))