在 R 中跨 Dataframe 迭代 Group_by

Iterate Group_by across Dataframe in R

我正在尝试简化脚本中的一段当前代码。

我想按两个分类变量的每种可能组合进行分组,并总结我的解释变量的平均值。

使用 ggplot2 中找到的 mpg 数据库的示例;

library(tidyverse)

   mpg %>% group_by(manufacturer, model) %>% summarise(mean = mean(hwy))
   mpg %>% group_by(manufacturer, year) %>% summarise(mean = mean(hwy))
   mpg %>% group_by(manufacturer, cyl) %>% summarise(mean = mean(hwy)) 

(这将一直持续到分类变量的所有组合 - 列完成)

mpg %>% group_by(cyl, year) %>% summarise(mean = mean(hwy))

等...

我的实际数据库有数百个分类变量,因此我想在 for 循环中或使用 purrr 来迭代该过程。

谢谢

这使用 purrr 到 select 字符和因子列,然后使用 combn() 到 select 所有组合。

library(ggplot2)
library(purrr)
library(dplyr)

map_lgl(mpg, ~ is.character(.) | is.factor(.))%>%
  names(.)[.]%>%
  combn(2, function(x) {mpg%>%group_by_at(x)%>%summarize(mean = mean(hwy))}, simplify = F)

请注意,这可能会变得混乱,因为 choose(100,2) 的计算结果为 4,950 种组合。