我有一个数据框,其中包含每个公司的一行,包含不同的变量(有些是数字,有些则不是):
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()}
但没有任何成功。
答案 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)))