Найти частоту слов в столбце в Google Sheets и найти другое значение из другого столбца, используя формулы - PullRequest
1 голос
/ 02 мая 2020

У меня есть 2 столбца данных в Google Sheet. Столбец1 - это уникальные слова или предложения (слова повторяются в предложениях), а Столбец2 - это число c рядом с каждым (скажем, голосами). Я пытаюсь получить список уникальных слов из столбца 1, а затем сумму значений (голосов) из столбца 2, когда слово присутствовало либо само по себе, либо в предложении.

Вот пример данных Я работаю с 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 значения в столбце 1 с использованием разделителя "", а затем SPLIT их с использованием того же разделителя, а затем TRANSPOSE их в столбец все за один шаг. Таким образом, у меня есть список всех слов, используемых в Column1, например, в Column3.
  2. В Column4 вытащите все значения UNIQUE, а затем выполните COUNTIF для уникальных значений из Column3. Таким образом, я могу получить частоту каждого уникального слова, ссылаясь на список всех слов.
  3. Чтобы получить сумму голосов, мне нужно TRANSPOSE Column4, а затем QUERY Column1 и Столбец2 с использованием текста Dynami c в формуле. Формула выглядит как =QUERY(Column1:Column2, "SELECT SUM(Column2) WHERE Column1 CONTAINS '" & referenceToUniqueWord & "'", 1). Сначала мне нужно транспонировать, потому что формула запроса выводит 2 ячейки данных ie Text: sumColumn1 и Number: 'sum of voice'. Поскольку для одной ячейки уникального слова я получаю две ячейки данных, я не могу перетащить формулу вниз и, следовательно, я должен сделать это горизонтально.
  4. Я наконец-то получаю три строки данных после последнего шага: Один строка только что транспонирована Column4 (все уникальные слова). Вторая строка - это просто текст sumColumn2, использующий формулу QUERY. И третий ряд - фактическая сумма голосов, полученная из отдельных QUERY формул. Затем я перемещаю эти строки в столбцы и для получения окончательной таблицы I VLOOKUP значений частоты, полученных ранее.

Этот подход является длительным и подвержен ошибкам. Также не работает, если список большой и в начальном JOIN я получаю ошибку, достигшую предела в 50 000. Любые идеи, чтобы сделать это лучше, приветствуются. Я знаю, что это можно сделать намного проще с помощью скриптов, но я бы предпочел, чтобы это делалось с использованием только формул.

1 Ответ

1 голос
/ 02 мая 2020

попробовать:

=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)''"))

0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...