summarise {dplyr} | R Documentation |
Create one or more scalar variables summarizing the variables of an
existing tbl. Tbls with groups created by group_by()
will result in one
row in the output for each group. Tbls with no groups will result in one row.
summarise(.data, ...) summarize(.data, ...)
.data |
A tbl. All main verbs are S3 generics and provide methods
for |
... |
Name-value pairs of summary functions. The name will be the
name of the variable in the result. The value should be an expression
that returns a single value like The arguments in |
summarise()
and summarize()
are synonyms.
An object of the same class as .data
. One grouping level will
be dropped.
Range: min()
, max()
, quantile()
Count: n()
, n_distinct()
Data frames are the only backend that supports creating a variable and using it in the same summary. See examples for more details.
When applied to a data frame, row names are silently dropped. To preserve,
convert to an explicit variable with tibble::rownames_to_column()
.
Other single table verbs: arrange
,
filter
, mutate
,
select
, slice
# A summary applied to ungrouped tbl returns a single row mtcars %>% summarise(mean = mean(disp), n = n()) # Usually, you'll want to group first mtcars %>% group_by(cyl) %>% summarise(mean = mean(disp), n = n()) # 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() # Note that with data frames, newly created summaries immediately # overwrite existing variables mtcars %>% group_by(cyl) %>% summarise(disp = mean(disp), sd = sd(disp)) # Refer to column names stored as strings with the `.data` pronoun: var <- "mass" summarise(starwars, avg = mean(.data[[var]], na.rm = TRUE)) # For more complex cases, knowledge of tidy evaluation and the # unquote operator `!!` is required. See https://tidyeval.tidyverse.org/ # # One useful and simple tidy eval technique is to use `!!` to # bypass the data frame and its columns. Here is how to divide the # column `mass` by an object of the same name: mass <- 100 summarise(starwars, avg = mean(mass / !!mass, na.rm = TRUE))