将列名称的向量传递到dplyr :: summarize以获取最大值/最小值

时间:2018-11-29 20:20:19

标签: r dplyr max summarize

我想这样做:

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

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

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

但是,这不起作用。如何修复语法以轻松实现此目的?

1 个答案:

答案 0 :(得分:1)

如果我们想在多列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