运行 在迭代该字段的所有类别后对完整变量进行循环

Running a loop on the complete variable after iterating on all the categories of that field

我在 R 中工作,我有一个数据框,它由带有分类数据的列组成。对于这些类别的每一个组合,我都必须汇总一个指标。
输入table:

ID  Region  Access  Touchpoints
A   Central High    8
B   Central Low     7
C   West    High    7
D   West    Low     3
E   Central High    2
F   Central Low     5
G   West    High    9
H   West    Low     8

我想要的输出:

Region  Access  Touchpoints
All     All     49
All     High    26
All     Low     23
Central High    10
West    High    16
Central Low     12
West    Low     11
Central All     22
West    All     27

问题是在嵌套循环中迭代这些变量时,我必须创建一个 All 类别。还有其他办法吗?

新答案

题目有点难解。但是提问者正在寻找的是几个分组变量中的聚合和总计data.table 中的 cube 函数是专门为这种情况设计的。

library(data.table)
df <- fread('ID  Region  Access  Touchpoints
A   Central High    8
B   Central Low     7
C   West    High    7
D   West    Low     3
E   Central High    2
F   Central Low     5
G   West    High    9
H   West    Low     8')
result <- cube(df, j = sum(Touchpoints), by = c('Region', 'Access'))

请注意 cube 只接受 data.table 和 returns。有关 data.table 软件包的更多信息,我参考了他们出色的 cheat-sheet,例如 wiki here。在结果 NA 中标记组和子组的总数。我们可以改变这个并通过 运行

回到 data.frame
df[is.na(Region), Region = 'All'][is.na(Access), Access := 'All']
setDF(df) #Change back to DF (if wanted)

旧答案

由于缺少可重现的示例,这将是一个有限的答案。

根据您的数据大小和可用内存,针对这些情况的最简单方法是简单地创建一个包含所有组合的网格以进行迭代。存在多种方法。在基础 R

combinations <- expand.grid(var1, var2, var3, ...) 
for(i in seq(nrow(combination))){
   current_comb <- combinations[i, ] 
   #Do stuff
   #...
}
#Alternative
#apply(combinations, 1, FUN)

对于 data.table 我们可以类似地使用 CJ(var1, var2, ...) 而对于 tidyverse 我们将使用 expand_grid.

这通常要快得多,但随着类别数量的增加,这将变得越来越不可行。不过,在您的情况下应该没问题。