在 R 中自动分组和汇总

Automate Grouping & Summarisation in R

我正在寻找有关如何自动执行大量分组和汇总任务的建议。

我对 4 列进行 dplyr 分组,然后根据它总结第五列。我分组的 4 列名称有 936 种组合。这意味着我需要执行分组和汇总 936 次。

数据框:

mydata <- read.table(header=TRUE, text="
  type     from     to      name    price    
  a        abc      xyz     new     10
  a        abc      xyz     new     15
  a        abc      xyz     new     11
  a        abc      xyz     new     12
  a        abc      xyz     new     10
  a        efg      hce     old     13  
  a        efg      hce     old     14  
  a        efg      hce     old     15  
  b        abc      hce     old     18
  b        abc      hce     old     19
  b        abc      hce     old     25
  b        abc      ijk     new     20 
  b        abc      ijk     new     25   
  b        efg      ijk     old     12
  b        efg      ijk     old     18
  b        efg      ijk     old     14
  b        efg      ijk     old     12
  b        efg      lmn     old     13
  b        efg      lmn     old     18
  b        efg      lmn     old     19
  b        efg      lmn     old     19
")

分组汇总:

file_1 <- mydata %>% filter(type=="a" & from=="abc" & to=="xyz" & name="new") %>%  group_by(price) %>% summarise(price=median(price), n=n())

.....

file_n <- mydata %>% filter(type=="b" & from=="efg" & to=="lmn" & name="old") %>% group_by(price) %>% summarise(price=median(price), n=n())

输出file_1包含2个变量:1.所有价格,2.相应价格的出现次数:

head(file_1)

前4个变量名组合个数,输出文件个数:

n_combinations <- mydata %>% group_by(type, from, to, name) %>% summarise(n=n())
dim(n_combinations)[1]

真实文件中每个组合有数百种不同的价格。

我知道创建 936 个输出文件是不切实际的,但我想知道您将如何处理这样的任务。我正在考虑使用最多 100 种组合的样本进行分析。

非常感谢!

在我看来

mydata %>% 
  group_by(type, from, to, name) %>% 
  summarise(price=median(price), .groups="drop")
# A tibble: 6 x 5
  type  from  to    name  price
  <fct> <fct> <fct> <fct> <dbl>
1 a     abc   xyz   new    11  
2 a     efg   hce   old    13.5
3 b     abc   hce   old    18  
4 b     abc   ijk   new    20  
5 b     efg   ijk   old    12  
6 b     efg   lmn   old    13  

做你想做的事,并且对 typefromname 的新组合很稳健。如果您不想要所有可能的组合,您可以只过滤结果数据集。

欢迎来到 SO,做得很好,因为它生成了比大多数新用户管理的更简单的 self-contained 最小工作示例!