在 Google 表格中的一列中查找单词的频率,并使用公式从不同的列中查找另一个值

Find frequency of words in a column in Google Sheets and lookup another value from a different column using formulae

我在 Google Sheet 中有 2 列数据。 Column1 是唯一的单词或句子(单词在句子中重复),Column2 是每个单词或句子旁边的数值(比如投票)。我正在尝试从 Column1 中获取唯一单词的列表,然后在单词单独出现或出现在句子中时从 Column2 中获取值(投票)的总和。

这是我在 Google Sheets:

中使用的数据示例
Term           Votes
apple          20
apple eat      100
orange         30
orange rules   40
rule why       50

这是最终结果的样子:

Word    Votes
apple   120
eat     100
orange  70
rules   40
rule    50
why     50

我现在的做法很长,我不确定这是否是最好的解决方案。

这是我的解决方案:

  1. JOIN Column1 中的值使用定界符“”,然后 SPLIT 使用相同的定界符,然后 TRANSPOSE 一步将它们放入一列中。这样我就有了 Column3 中 Column1 中使用的所有单词的列表。
  2. 在 Column4 中取出所有 UNIQUE 值,然后对 Column3 中的唯一值执行 COUNTIF。这样我就可以通过引用所有单词的 lsit 来获得每个唯一单词的频率。
  3. 为了获得投票的总和,我必须在公式中使用动态文本 TRANSPOSE Column4,然后 QUERY Column1 和 Column2。公式看起来像 =QUERY(Column1:Column2, "SELECT SUM(Column2) WHERE Column1 CONTAINS '" & referenceToUniqueWord & "'", 1)。我必须首先转置的原因是因为查询公式输出 2 个数据单元格,即文本:sumColumn1 和数字:'sum of votes'。由于对于一个唯一单词的单元格我得到两个数据单元格我无法将公式向下拖动因此我必须水平进行。
  4. 经过最后一步终于得到三行数据: 一行只是转置 Column4(所有唯一的单词)。第二行只是使用 QUERY 公式得到的文本 sumColumn2。第三行是实际票数总和,由个别 QUERY 公式得出。然后我将这些行转置为列并得到我的最终 table I VLOOKUP 较早到达的频率值。

这种方法冗长且容易出错。如果列表很大并且在最初的 JOIN 中我得到一个达到限制 50,000 的错误也不起作用。欢迎任何让它变得更好的想法。我知道使用脚本可以更轻松地完成此操作,但我更愿意仅使用公式来完成它。

尝试:

=ARRAYFORMULA(QUERY(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(
 IF(IFERROR(SPLIT(A:A, " "))="",,"♠"&SPLIT(A:A, " ")&"♦"&B:B)
 ,,999^99)),,999^99), "♠")), "♦"), 
 "select Col1,sum(Col2) 
  group by Col1
  order by sum(Col2) desc 
  label sum(Col2)''"))