【问题标题】:How would you identify patterns of non-ordinal text string co-occurrence across columns in Excel?您将如何识别 Excel 中各列中非序号文本字符串共现的模式?
【发布时间】:2026-02-03 18:45:02
【问题描述】:

我对识别多列文本字符串的共现模式很感兴趣。我有一个固定呼叫中心数据的研究数据集(1 个呼叫 = 1 行)。我已经手动向数据集中添加了 4 列来添加标签,我们将列命名为 Theme1、Theme2、Theme3、Theme4。

大约有 50 个标签是文本字符串,非序数,并且使用一致的拼写(例如,Red、Blue、Green、Orange、Violet...[44 种随机颜色]...Aquamarine)

标签在列之间是互斥的。有些调用只使用了 1 个或 2 个标签。我提到它们是非序数的,所以我的意思是标签可能出现在 Theme1 的一行中,然后出现在 Theme2 的另一行中。这是一个例子:

Theme1 Theme2 Theme3 Theme4
Red Blue Green Violet
Blue Green
Green Red Blue Violet
Violet Green
Blue
Blue Red
Expected Output 
Red AND Blue both in a row = 400
Blue AND Green both in a row = 320
Violet AND Red both in a row = 115

我想做的是找出行中的任何常见配对。所以我想知道有多少行有一个红色和一个蓝色——或者更恰当地说([红色然后蓝色]或[蓝色然后红色])。

我检查了“堆栈”,但没有发现任何人试图识别相关联的互斥、非序数文本字符串中的模式。我想到使用 =Concatenate 并简单地进行手动审查。实际上,这就是我可能最终会做的事情......但这需要很长时间,而且我知道它有可能错过一些事情。

我想到的另一件事是转置列,以便每一列成为跨越 50 列红色、蓝色、绿色、橙色、紫罗兰色...[44 种随机颜色]...海蓝宝石的 Y/N 标志。我想到的另一件事是以某种方式编写一个函数,以确保前 25 个标签仅出现在 Theme1 列中,而其他 25 个标签仅出现在 Theme2 列中……但即使在我写这篇文章时,我也不确定这是否可行...

你会怎么做? 谢谢!

【问题讨论】:

  • 从上面的示例数据中您期望得到什么输出?您能否添加另一个标题为 Expected Output 的列,然后手动输入结果并解释结果是如何产生的。
  • 您是在寻找(例如)红色紧跟在蓝色之后(即在相邻的列中),还是主题 1 中的红色和主题 3 中的蓝色? BTW 有 1000 多对 50 种颜色。
  • @TomSharpe 后者:只是一些可以检测红色和蓝色是否在同一行中的公式。更广泛地说,一个计算 4 列中 2 个文本字符串的所有行组合的公式。

标签: excel string text


【解决方案1】:

好吧,我相信你不会介意我说这个问题是相当开放的,但这里有一些建议:

要查找同一行中两种颜色的共现,请使用标准Mmult formula 获取行总数

=SUM(MMULT(N($A$2:$D$7=$G2),{1;1;1;1})*MMULT(N($A$2:$D$7=H$1),{1;1;1;1}))

(我选择使用数组常量,因为我们只对有四列的情况感兴趣)。

您可以进一步开发它以获取示例

颜色 1 跟随颜色 2 的行

=SUM((MMULT(IF($A$2:$D$7=$G2,COLUMN($A$2:$D$7),0),{1;1;1;1})>MMULT(IF($A$2:$D$7=H$1,COLUMN($A$2:$D$7),0),{1;1;1;1}))
*MMULT(N($A$2:$D$7=$G2),{1;1;1;1})*MMULT(N($A$2:$D$7=H$1),{1;1;1;1}))

颜色 1 紧跟在颜色 2 之后的行

=SUM(--((MMULT(IF($A$2:$D$7=$G2,COLUMN($A$2:$D$7),0),{1;1;1;1})-MMULT(IF($A$2:$D$7=H$1,COLUMN($A$2:$D$7),0),{1;1;1;1}))
*MMULT(N($A$2:$D$7=$G2),{1;1;1;1})*MMULT(N($A$2:$D$7=H$1),{1;1;1;1})=1))

注意事项

考虑上面第一张图片中的单元格 H3。这会计算有多少行同时包含蓝色和红色。

(1) 使用相等运算符 (=) 将 A2:D7 中数据的每个元素与 G2(蓝色)进行比较:

=A$2:$D$7=$G3

产量

(2) 为了使用 Mmult,真/假数组必须转换为数字(0 或 1):

=N($A$2:$D$7=$G3)

(3) 我们将通过列向量去matrix multiply

={1;1;1;1}

分号是行分隔符

(4) 因此,Mmult 在原始矩阵的每一行中移动,将每个元素乘以 1 并将它们加在一起以获得每一行的行总数。

=MMULT(N($A$2:$D$7=$G3),{1;1;1;1})

(5) 另一个 Mmult 的工作方式完全相同,并获取 Red 的行总数

=MMULT(N($A$2:$D$7=H$1),{1;1;1;1})

(6)

然后你对行总数的这两个列向量进行标量乘法,以找出有多少行包含红色蓝色

=MMULT(N($A$2:$D$7=$G3),{1;1;1;1})*MMULT(N($A$2:$D$7=H$1),{1;1;1;1})

(7)

剩下的就是使用 SUM 来计算行总数中 1 的数量:

=SUM(MMULT(N($A$2:$D$7=$G3),{1;1;1;1})*MMULT(N($A$2:$D$7=H$1),{1;1;1;1}))

结果:3

【讨论】:

  • 太棒了!非常感谢。我调整了你的解决方案,它奏效了。老实说,我根本不懂语法。我肯定还有更多东西要学。
  • 嗨,Tom,您介意带我了解一下上面第一个公式的语法吗? =SUM(MMULT(N($A$2:$D$7=$G2),{1;1;1;1})*MMULT(N($A$2:$D$7=H$1),{1;1 ;1;1})) 我试图了解它是如何工作的,但我希望得到一些指导。我已经尝试过有关数组公式的 Excel 教程,但我仍然无法在这里梳理语法。
  • 是的,当然,会在我的回答中添加注释。