在summary_if() 中使用其他列作为函数的参数

Kev*_*vin 7 r dplyr

这很好用(将其视为使用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)

为什么?

Cze*_*Ink 2

我相信这与您为这个新变量命名的内容有关。这有效:

mtcars %>% 
     group_by(cyl) %>% 
     summarize_if(is.numeric, list(tmp = ~weighted.mean(., wt)))
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅此处的命名部分以及此处已指出的问题。