我正在计算大型数据框中许多变量的汇总统计数据(它有 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*根据需要创建组并创建一个全局组。这样的事情存在吗?我希望我的问题很清楚。提前致谢。
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)