当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R dplyr summarise 将每组汇总为一行


summarise() 创建一个新的 DataFrame 。它为分组变量的每个组合返回一行;如果没有分组变量,输出将有一行总结输入中的所有观察结果。它将包含每个分组变量的一列和您指定的每个汇总统计数据的一列。

summarise()summarize() 是同义词。

用法

summarise(.data, ..., .by = NULL, .groups = NULL)

summarize(.data, ..., .by = NULL, .groups = NULL)

参数

.data

数据帧、数据帧扩展(例如 tibble)或惰性数据帧(例如来自 dbplyr 或 dtplyr)。有关更多详细信息,请参阅下面的方法。

...

< data-masking > Name-value 汇总函数对。该名称将是结果中变量的名称。

该值可以是:

  • 长度为 1 的向量,例如min(x)n()sum(is.na(y))

  • DataFrame ,用于从单个表达式添加多个列。

[Deprecated]从 1.1.0 开始,返回大小为 0 或 >1 的值已被弃用。请用reframe()为此。

.by

[Experimental]

< tidy-select > (可选)仅针对此操作选择要分组的列,作为 group_by() 的替代方案。有关详细信息和示例,请参阅?dplyr_by

.groups

结果的分组结构。

  • "drop_last":删除最后一级分组。这是 1.0.0 版本之前唯一受支持的选项。

  • "drop":所有级别的分组均被删除。

  • "keep":与.data相同的分组结构。

  • "rowwise":每一行都是它自己的组。

当未指定.groups时,根据结果的行数选择:

  • 如果所有结果都有 1 行,您将得到"drop_last"。

  • 如果行数变化,您将得到 "keep" (请注意,不推荐返回可变行数,而改为 reframe() ,这也会无条件地删除所有级别的分组)。

此外,一条消息会通知您该选择,除非结果未分组,否则选项 "dplyr.summarise.inform" 设置为 FALSE ,或者当从包中的函数调用 summarise() 时。

通常与 .data 具有相同类型的对象。

  • 这些行来自底层 group_keys()

  • 这些列是分组键和您提供的摘要表达式的组合。

  • 分组结构由.groups=参数控制,输出可能是另一个grouped_dftibblerowwise数据帧。

  • DataFrame 属性不会保留,因为 summarise() 从根本上创建了一个新的 DataFrame 。

有用的函数

后端变化

DataFrame 后端支持创建变量并在同一摘要中使用它。这意味着之前创建的摘要变量可以在摘要内进一步转换或组合,如mutate() 中所示。但是,这也意味着与先前变量同名的汇总变量会覆盖它们,使这些变量不可用于以后的汇总变量。

其他后端可能不支持此行为。为了避免出现意外结果,请考虑为汇总变量使用新名称,尤其是在创建多个汇总时。

方法

该函数是泛型函数,这意味着包可以为其他类提供实现(方法)。有关额外参数和行为差异,请参阅各个方法的文档。

加载的包中当前提供以下方法: dbplyr ( tbl_lazy )、dplyr ( data.framegrouped_dfrowwise_df ) 。

也可以看看

其他单表动词: arrange()filter()mutate()reframe()rename()select()slice()

例子

# A summary applied to ungrouped tbl returns a single row
mtcars %>%
  summarise(mean = mean(disp), n = n())
#>       mean  n
#> 1 230.7219 32

# Usually, you'll want to group first
mtcars %>%
  group_by(cyl) %>%
  summarise(mean = mean(disp), n = n())
#> # A tibble: 3 × 3
#>     cyl  mean     n
#>   <dbl> <dbl> <int>
#> 1     4  105.    11
#> 2     6  183.     7
#> 3     8  353.    14

# Each summary call removes one grouping level (since that group
# is now just a single row)
mtcars %>%
  group_by(cyl, vs) %>%
  summarise(cyl_n = n()) %>%
  group_vars()
#> `summarise()` has grouped output by 'cyl'. You can override using the
#> `.groups` argument.
#> [1] "cyl"

# BEWARE: reusing variables may lead to unexpected results
mtcars %>%
  group_by(cyl) %>%
  summarise(disp = mean(disp), sd = sd(disp))
#> # A tibble: 3 × 3
#>     cyl  disp    sd
#>   <dbl> <dbl> <dbl>
#> 1     4  105.    NA
#> 2     6  183.    NA
#> 3     8  353.    NA

# Refer to column names stored as strings with the `.data` pronoun:
var <- "mass"
summarise(starwars, avg = mean(.data[[var]], na.rm = TRUE))
#> # A tibble: 1 × 1
#>     avg
#>   <dbl>
#> 1  97.3
# Learn more in ?rlang::args_data_masking

# In dplyr 1.1.0, returning multiple rows per group was deprecated in favor
# of `reframe()`, which never messages and always returns an ungrouped
# result:
mtcars %>%
   group_by(cyl) %>%
   summarise(qs = quantile(disp, c(0.25, 0.75)), prob = c(0.25, 0.75))
#> Warning: Returning more (or less) than 1 row per `summarise()` group was
#> deprecated in dplyr 1.1.0.
#> ℹ Please use `reframe()` instead.
#> ℹ When switching from `summarise()` to `reframe()`, remember that
#>   `reframe()` always returns an ungrouped data frame and adjust
#>   accordingly.
#> `summarise()` has grouped output by 'cyl'. You can override using the
#> `.groups` argument.
#> # A tibble: 6 × 3
#> # Groups:   cyl [3]
#>     cyl    qs  prob
#>   <dbl> <dbl> <dbl>
#> 1     4  78.8  0.25
#> 2     4 121.   0.75
#> 3     6 160    0.25
#> 4     6 196.   0.75
#> 5     8 302.   0.25
#> 6     8 390    0.75
# ->
mtcars %>%
   group_by(cyl) %>%
   reframe(qs = quantile(disp, c(0.25, 0.75)), prob = c(0.25, 0.75))
#> # A tibble: 6 × 3
#>     cyl    qs  prob
#>   <dbl> <dbl> <dbl>
#> 1     4  78.8  0.25
#> 2     4 121.   0.75
#> 3     6 160    0.25
#> 4     6 196.   0.75
#> 5     8 302.   0.25
#> 6     8 390    0.75
源代码:R/summarise.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Summarise each group down to one row。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。