16

有一列ValuesStrings,然后在下面显示最常见的值和该值的出现次数(即 的模式Strings)。这是一个例子。

+--------+
| Values |
+--------+
|   AA   |
+--------+
|   BB   |
+--------+
|   AA   |
+--------+
|   AA   |
+--------+
|   GG   |
+--------+
|   DD   |
+--------+
|   DD   |
+--------+
|        |
+-----------------+--------+
|   Most Common   |   AA   |
+-----------------+--------+
| Number of times |   03   |
+-----------------+--------+

这将在 Google 电子表格中完成!有小费吗?

4

3 回答 3

34

对于您的具体示例,将其设为 A 列,因此您有 A1='AA'、A2='BB'、...、A7='DD'。

要找到最大元素出现的次数,我们要计算每个唯一元素,然后返回最大计数,因此在单元格中使用公式

=MAX(COUNTIF(A1:A7,A1:A7))

这是一个 ARRAY 公式,因此在 excel 中您必须按 Ctrl+Shift+Enter 才能使用它。要在 google 电子表格中使用,请用 ARRAYFORMULA 将其包围,使其变为

=ARRAYFORMULA(MAX(COUNTIF(A1:A7,A1:A7)))

说明:内部 countif 计算 A1:A7 的单元格,如果它们等于 A1:A7 中的每个值,并将它们放入列表中。Max 返回该列表中的最大值。

现在,要获得实际元素,我们有另一个 ARRAY 公式。我们可以进行索引/匹配查找来找出值,因此在函数内部,max 找到计数最多的值,然后将其传递给索引+匹配函数以在原始列表中查找值

=INDEX(A1:A7,MATCH(MAX(COUNTIF(A1:A7,A1:A7)),COUNTIF(A1:A7,A1:A7),0))

所以对于谷歌电子表格

=ARRAYFORMULA(INDEX(A1:A7,MATCH(MAX(COUNTIF(A1:A7,A1:A7)),COUNTIF(A1:A7,A1:A7),0)))

您将 A1:A7 的每个实例替换为数据的实际范围。

这篇文章很有帮助: http ://www.mrexcel.com/forum/excel-questions/34530-mode-text-strings.html

于 2013-08-06T01:18:35.737 回答
0

您可以使用字符串和计数器创建一个映射,并在每次出现该字符串时递增计数器。我不知道 java 脚本,但类似下面的 sudocode 应该可以计算出现次数:

Dictionary<string, int> _map;

foreach(cell in sheet.cells)
{
    if(_map.contains(cell.value) ==  FALSE)
    {
        _map.add(cell.value)
    {
    _map.item(cell.value) += 1 // increment number of occurrences 
}

在此之后,您应该循环查找最大数字,存储其关联的字符串并找到与最大数字的字符串关联的数字。

于 2013-08-06T01:36:44.993 回答
0

为了让这个在谷歌电子表格中工作,上面没有工作,而是返回一个超出范围的错误。我不得不稍微修改一下格式。这是有效的;

=index(G14:ZZ14;;(MATCH(MAX(COUNTIF(G14:ZZ14,G14:ZZ14)),COUNTIF(G14:ZZ14,G14:ZZ14),0)))

用您的范围替换对 G14:ZZ14 的 5 个引用。

于 2014-08-04T06:08:58.883 回答