这很好用(将其视为使用list()而不是vars() 此处的解决方案):
mtcars %>%
group_by(cyl) %>%
summarize_at(vars(disp, hp), list(~weighted.mean(., wt)))
Run Code Online (Sandbox Code Playgroud)
但是,在非常相似的情况下使用summarize_if(),它不起作用:
mtcars %>%
group_by(cyl) %>%
summarize_if(is.numeric, list(~weighted.mean(., wt)))
Error in weighted.mean.default(., wt) :
'x' and 'w' must have the same length
Run Code Online (Sandbox Code Playgroud)
为什么?
我相信这与您为这个新变量命名的内容有关。这有效:
mtcars %>%
group_by(cyl) %>%
summarize_if(is.numeric, list(tmp = ~weighted.mean(., wt)))
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅此处的命名部分以及此处已指出的问题。