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