【问题标题】:Summarizing columns using a vector with dplyr使用带有 dplyr 的向量汇总列
【发布时间】:2020-01-26 14:54:34
【问题描述】:

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

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

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

【问题讨论】:

  • 请注意,如果您有一个城市列可以简化代码,这将使分析更容易(您只需要按向量上的城市进行过滤,然后进行汇总。
  • 您的意思是将所有值合并到一列中,然后为城市添加另一列吗?所以一共有 3 列?
  • 是的,您可能需要来自 tidyr 的 pivot_longer

标签: r dplyr summarize


【解决方案1】:

你可以这样做:

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():匹配字符向量中的变量名。

【讨论】:

  • 完美,只是关于需要/使用 vars() 的后续问题。没有这个函数,R为什么选择变量失败?
  • 查看文档:“此帮助程序旨在提供与 select() 等效的语义。例如,它用于范围概括和变异动词(mutate_at() 和 summarise_at())。”。
【解决方案2】:

vars 可以采用 vector 的列名。 select-helpers(matches, starts_with, ends_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

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 2019-01-27
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多