将列名向量传递给 dplyr::summarize 以获得 max/min

Pass a vector of column names into dplyr::summarize to get max/min

我想这样做:

data %>%
    group_by(ID) %>%
    summarize(maxVal = max(Val),
              maxVal2 = max(Val2))

但是,我有很多列我想得到最大值。我想传入这样的列向量:

cols <- c("Val", "Val2")
data %>%
    group_by(ID) %>%
    summarize(max(cols))

但是,这不起作用。如何修复语法以轻松执行此操作?

如果我们想在多列中的summarize之后有一个前缀名称,那么使用rename_at

library(tidyverse)
data %>%
   group_by(ID) %>%
   summarise_at(vars(cols), max) %>%
   rename_at(-1, ~ paste0('max', .))

作为可重现的示例,使用了 data(mtcars)

mtcars %>% 
  group_by(gear) %>% 
  summarise_at(vars(mpg, disp), max) %>% 
  rename_at(-1, ~ paste0('max', .))
# A tibble: 3 x 3
#   gear maxmpg maxdisp
#  <dbl>  <dbl>   <dbl>
#1     3   21.5    472 
#2     4   33.9    168.
#3     5   30.4    351