我正在创建一堆基本的状态报告,其中一件我觉得很乏味的事情是向所有表添加一个总计行。我目前正在使用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风格的编程,尽管我并不打算这么做。
6条答案
按热度按时间b4qexyjb1#
另一种选择:
xmq68pz92#
您可以编写一个函数,对
ungroup
艾德tibble执行相同的summarize
操作,并将其绑定到末尾。如果需要,可以为“总体”组的命名添加一些逻辑
u5rb5r593#
创建于2019-06-21由reprex package(v0.3.0)
ao218c7q4#
一种方法是将第二个summarise指令放在
bind_rows
中,这种方法也很繁琐,但在一个较长的管道中。as.character
调用避免了警告:警告消息:
1:在bind_rows_(x,.id)中:
绑定因子和特征向量,强制转换为特征向量
2:在bind_rows_(x,.id)中:
绑定字符和因子向量,强制为字符向量
j13ufse25#
也许是这样的:
当你想对同一个输入(
iris
)执行不同的操作时,最好在不同的汇总函数上执行map
并应用于数据。map_dfr
使用bind_rows
组合列表输出ybzsozfc6#
解决方案,您需要在双数据集上仅应用所需函数一次:
技巧是用一个新的组ID(即
Species
)传递原始数据集:mutate(iris, Species = "Overall")