【发布时间】:2019-11-04 16:06:53
【问题描述】:
我正在创建一堆基本状态报告,其中一件我觉得乏味的事情是在我的所有表格中添加一个总行。我目前正在使用 Tidyverse 方法,这是我当前代码的一个示例。我正在寻找的是一个默认包含几个不同级别的选项。
#load into RStudio viewer (not required)
iris = iris
#summary at the group level
summary_grouped = iris %>%
group_by(Species) %>%
summarize(mean_s_length = mean(Sepal.Length),
max_s_width = max(Sepal.Width))
#summary at the overall level
summary_overall = iris %>%
summarize(mean_s_length = mean(Sepal.Length),
max_s_width = max(Sepal.Width)) %>%
mutate(Species = "Overall")
#append results for report
summary_table = rbind(summary_grouped, summary_overall)
重复多次这样做非常乏味。我有点想要:
summary_overall = iris %>%
group_by(Species, total = TRUE) %>%
summarize(mean_s_length = mean(Sepal.Length),
max_s_width = max(Sepal.Width))
仅供参考 - 如果您熟悉 SAS,我正在寻找可通过 proc 中的类、方式或类型语句获得的相同类型的功能,这意味着让我可以控制汇总级别并在一次调用中获得多个级别。
感谢任何帮助。我知道我可以创建自己的函数,但希望有些东西已经存在。我也更愿意坚持使用 tidyverse 编程风格,尽管我并没有这样做。
【问题讨论】:
-
请参阅here 了解一些想法,但我所见过的几乎所有东西都非常手动且笨重。
-
janitor和pivottabler软件包提供了一些内置方法。 cran.r-project.org/web/packages/pivottabler/vignettes/… -
不幸的是,分组集在 dplyr github.com/tidyverse/dplyr/issues/236 中不太可能是原生的
-
如果数据不是很大,你可以把底部的所有东西都绑定一遍,然后用它作为总摘要 -
iris %>% bind_rows(., mutate(iris, Species="all")) ...- 浪费内存,但可以避免多次调用。跨度>
标签: r dplyr tidyverse group-summaries