Получение уникальных значений и их количества в столбце значений через запятую в Google Sheets без использования JOIN? - PullRequest
1 голос
/ 14 марта 2019

У меня есть столбец с кучей списков ингредиентов.Я пытаюсь выяснить, сколько раз появляются отдельные ингредиенты.Есть 73 000 строк.Ответы на этот вопрос подходят для небольшого количества данных в Google Sheets.

Формула =UNIQUE(TRANSPOSE(SPLIT(JOIN(", ";A2:A);", ";FALSE)))

Но я перегружен JOIN более чем50000 символов здесь.Есть ли другой способ справиться с этим?

Лист: https://docs.google.com/spreadsheets/d/1t0P9hMmVpwhI2IbATmIMjobuALTg8VWhl8-AQaq3zIo/edit?usp=sharing

enter image description here

Ответы [ 4 ]

1 голос
/ 14 марта 2019

Я разработал решение для сценариев Google, потому что хотел поиграть с парами карт ключей.

function myFunction() {
  var myMap = {"candy":0};
    var sh = SpreadsheetApp.getActiveSpreadsheet();
    var ss = sh.getSheetByName("FIRSTSHEETNAME");
    var os = sh.getSheetByName("Ingredients");
    var data = ss.getDataRange().getValues();
    for (var i=0; i<data.length;i++)//full
    //for (var i=1; i<4000;i++)//test
      {
      var array = data[i][0].split( ",");
      for (var j=0; j<array.length;j++)
        {
          var item = array[j];
          //Logger.log(array[j]);
          if (myMap[item]>-1){
            //Logger.log("REPEAT INGREDIENT");
            var num = parseInt(myMap[item]);
            num++;
            myMap[item]=num;
            //Logger.log(item +" "+num);
          } else {
            myMap[item]=1;
            //Logger.log("New Ingredient: "+item);
            //Logger.log(myMap);
          }

        }
      }
  //Logger.log(myMap);
  var output=[];
  for (var key in myMap){
    //Logger.log("Ack");
    output.push([key,myMap[key]]);


  }
  //Logger.log(output);
  os.getRange(2,1,output.length,output[0].length).setValues(output);

}

Вам потребуется добавить вкладку «Ингредиенты» для вывода и изменить свою первую вкладку, которая будет называтьсяFIRSTSHEETNAME (или измените код).В моем тестировании это заняло 4 секунды для 4 предметов, 5 секунд для 400 предметов и 6 секунд для 4000 предметов.может быть проблема с ведущими пробелами, но это дает вам место для начала.

1 голос
/ 14 марта 2019

но может вам понадобится (?):

=QUERY(TRANSPOSE(SPLIT(REGEXREPLACE(TRANSPOSE(
 QUERY(ARRAYFORMULA(","&A1:A),,5000000))," ,",","),",")),
 "select Col1,count(Col1) 
  where Col1 is not null 
  group by Col1 
  label count(Col1)''")

0

1 голос
/ 14 марта 2019
=ARRAYFORMULA(UNIQUE(TRIM(TRANSPOSE(SPLIT(TRANSPOSE(
 QUERY(","&A1:A,,5000000)),",")))))

0


=QUERY(QUERY(ARRAYFORMULA(TRIM(TRANSPOSE(SPLIT(TRANSPOSE(
 QUERY(","&A1:A,,5000000)),",")))),
 "select Col1,count(Col1) 
  where Col1 is not null 
  group by Col1 
  label count(Col1)''"),
  "order by Col2 desc")

0

демонстрационная таблица

1 голос
/ 14 марта 2019
=UNIQUE(TRANSPOSE(SPLIT(REGEXREPLACE(TRANSPOSE(
 QUERY(ARRAYFORMULA(","&A1:A),,5000000))," ,",","),",")))

0

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