我认为以下任务经常出现:计算每个组和所有数据的摘要,并在一个数据框中显示结果。例如,对于虹膜数据帧,我们可以计算每个物种的每列的平均值:
library(tidyverse)
df_groups <- iris %>%
group_by(Species) %>%
summarise_at(vars(-Species), mean)
>df_groups
# A tibble: 3 × 5
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
<fctr> <dbl> <dbl> <dbl> <dbl>
1 setosa 5.006 3.428 1.462 0.246
2 versicolor 5.936 2.770 4.260 1.326
3 virginica 6.588 2.974 5.552 2.026
我们可以计算所有物种的每列的平均值,并将唯一的行称为“所有物种”:
df_all <- iris %>%
summarise_at(vars(-Species), mean) %>%
mutate(Species='All Species')
> df_all
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.8433 3.0573 3.758 1.1993 All Species
最后,通过绑定两个数据帧,我们获得了所需的输出:
df_all %>% bind_rows(df_groups) %>%
select(Species, everything()) # make Species the first column
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 All Species 5.8433 3.0573 3.758 1.1993
2 setosa 5.0060 3.4280 1.462 0.2460
3 versicolor 5.9360 2.7700 4.260 1.3260
4 virginica 6.5880 2.9740 5.552 2.0260
我的问题是:所有这些都可以在一个管道中完成(无需创建两个数据帧然后绑定它们)吗?