Dplyr:同时汇总组和整个数据

deb*_*rah 4 group-by r dplyr

我正在计算大型数据框中许多变量的汇总统计数据(它有 130 个变量)。我希望计算每十年和我所有数据的汇总统计数据。我想避免写两次summary:一次用于分组,一次用于完整数据。我也使用summarise_at,所以我的问题也适用于summarise_at。

这是一个最小的示例,其中 summarise_at() 似乎有点夸张,但对于我的真实数据而言并非如此:

my.data <- data.frame(Date = as.Date(c('1981-04-09', '1983-02-01', '1992-10-19', '1996-11-22', '1987-05-15')),
  decade = c('Eighties', 'Eighties', 'Nineties', 'Nineties', 'Eighties'),
  price = c(10, 11, 17, 34, 12),
  d.sector.Oil = c(0,0,1,1,1),
  d.sector.Mines = c(1,1,0,0,0)) # An example dataframe
# Calculate summary statistics for each decade and each variable:
sumst.decades<- my.data %>% group_by(decade) %>% summarise(mean.price = mean(price))
sumd.decades<- my.data %>% group_by(decade) %>% summarise_at(vars(starts_with('d.sector.')), sum)
Run Code Online (Sandbox Code Playgroud)

我的完整数据需要相同的摘要。为此,我将重复上面的命令行,但没有“group_by”:

sumst<- summarise(my.data, mean.price = mean(price))
sumd<- summarise_at(my.data, vars(starts_with('d.sector.')), sum)
Run Code Online (Sandbox Code Playgroud)

我希望不必写最后两行,但不知怎的,除了分组摘要之外,dplyr 还给我一个全局摘要。例如,如果有一个函数group_by*根据需要创建组并创建一个全局组。这样的事情存在吗?我希望我的问题很清楚。提前致谢。

hel*_*end 7

Tidyverse解决方案:

library(tidyverse)

my.data %>% 
  mutate(decade = as.character(decade)) %>%
  bind_rows(., my.data %>% mutate(decade = as.character("All"))) %>%
  group_by(decade) %>% 
  summarise_if(is.numeric, c("sum", "mean")) %>% 
  ungroup()
Run Code Online (Sandbox Code Playgroud)