【问题标题】:Aggregating by columns and then by rows in Google Sheets without adding columns按列聚合,然后在 Google 表格中按行聚合而不添加列
【发布时间】:2019-11-24 10:15:40
【问题描述】:

我想对每一行中的列应用聚合函数,然后对结果应用另一个聚合,而不向表中添加仅计算列。有可能吗?

例如,考虑下表:

    A      B         C         D
1 Items Property1 Property2 Property3
2 Item1    Y                   Y
3 Item2                        Y
4 Item3              Y
5 Item4    Y         Y         Y

这里的 Y(yes) 表示该项目具有给定的属性。

我想计算至少有 2 个属性的项目数。在这种情况下,它应该是 2(Item1 和 Item4)。我可以将列 E 添加到表中,例如:

Number of properties
COUNTIF(B2:D2, "Y")
COUNTIF(B3:D3, "Y")
COUNTIF(B4:D4, "Y")
COUNTIF(B5:D5, "Y")

然后将COUNTIF(E2:E5, ">2") 应用到它。但这需要在我想要避免的表中添加一列。

当我破解时,我最终使用了 MMULT,例如:

=ARRAYFORMULA(COUNTIF(MMULT({if(B2:D5<>"", 1, 0)}, {1;1;1}), ">=2"))

这里的公式将 Y 和空格替换为 1 和 0,然后使用矩阵乘法计算每行中 1 的数量,然后计算结果行中至少具有 2 个属性的单元格数。但这感觉就像一个丑陋的黑客,恰好在我的情况下起作用。

有没有一种通用的方法可以按列进行双重聚合,然后通过具有独立聚合函数的行进行双重聚合?

【问题讨论】:

  • 你想要的输出是什么?
  • 一个带有数字的单元格。

标签: google-sheets sum google-sheets-formula array-formulas google-sheets-query


【解决方案1】:

其实你的公式:

=ARRAYFORMULA(COUNTIF(MMULT({IF(B2:D="Y", 1, 0)}, {1;1;1}), ">=2"))

除非您因为某些未提及的原因而宁愿避开MMULT,否则就在现场...

替代方案可能是:

=ARRAYFORMULA(COUNTIF(LEN(SUBSTITUTE(
 TRANSPOSE(QUERY(TRANSPOSE(B2:D),,99^99)), " ", )), ">=2"))

【讨论】:

  • 转置和查询的技巧很不错,可以推广到其他无法用 mmult 轻易破解的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多