使用带有dplyr的向量汇总列

时间:2019-09-26 10:35:35

标签: r dplyr summarize

我想计算某些列的平均值(存储在向量中的名称),同时对列进行分组。这是一个可重现的示例:

Cities <- c("London","New_York")
df <- data.frame(Grade = c(rep("Bad",2),rep("Average",4),rep("Good",4)),
                 London = seq(1,10,1), 
                 New_York = seq(11,20,1), 
                 Shanghai = seq(21,30,1))

> df
     Grade London New_York Shanghai
1      Bad      1       11       21
2      Bad      2       12       22
3  Average      3       13       23
4  Average      4       14       24
5  Average      5       15       25
6  Average      6       16       26
7     Good      7       17       27
8     Good      8       18       28
9     Good      9       19       29
10    Good     10       20       30

我想要的输出:

> df %>% group_by(Grade) %>% summarise(London = mean(London), New_York = mean(New_York))

# A tibble: 3 x 3
  Grade   London New_York
  <fct>    <dbl>    <dbl>
1 Average    4.5     14.5
2 Bad        1.5     11.5
3 Good       8.5     18.5

我想在cities中选择向量summarise中的元素(不调用其名称),同时在向量中保留其原始名称

2 个答案:

答案 0 :(得分:2)

您可以这样做:

df %>%
 group_by(Grade) %>%
 summarise_at(vars(one_of(Cities)), mean)

  Grade   London New_York
  <fct>    <dbl>    <dbl>
1 Average    4.5     14.5
2 Bad        1.5     11.5
3 Good       8.5     18.5

摘自文档:

  

one_of():匹配字符向量中的变量名称。

答案 1 :(得分:0)

vars可以采用vector这样的列名。 select-helpersmatchesstarts_withends_with在需要某种模式匹配时使用)。现在,对于当前的实现方式vars更为通用,它可以选择列,然后取消选择(使用-

library(dplyr)
df %>% 
    group_by(Grade) %>%
    summarise_at(vars(Cities), mean)
# A tibble: 3 x 3
#  Grade   London New_York
#  <fct>    <dbl>    <dbl>
#1 Average    4.5     14.5
#2 Bad        1.5     11.5
#3 Good       8.5     18.5