如何从谷歌表中的两个csv列创建矩阵?

时间:2015-04-18 02:50:25

标签: csv google-sheets google-docs google-form

我正在使用Google表单将数据输入到Google电子表格中。我有两列包含CSV格式的数据。

我想使用公式生成一个矩阵,表示每个项目的出现次数和每个行/列的总数。

我已尝试过此线程https://productforums.google.com/forum/#!topic/docs/3vXh-NNtgW8中的示例公式,但当B列中有多个值时逻辑会中断。

这是一张包含上图中示例数据的表格。 https://docs.google.com/spreadsheets/d/1HHBTV8zTZs2xlGudta1o05b_zX21b5I3KRrBLo__kpo/edit#gid=450392226

谢谢!

1 个答案:

答案 0 :(得分:3)

this spreadsheet我尝试提供两种解决方案。请注意,公式非常复杂,但核心是:

=ArrayFormula(query({transpose(split(join(",",trim(transpose(split(query(rept(A2:A5&char(9),len(substitute(B2:B5,",",""))),,5000),char(9))))),",")), transpose(split(QUERY(rept(transpose(split(query(B2:B5&",",,rows(B2:B5)),","))&char(9),  len(substitute(trim(transpose(split(query(rept(A2:A5&char(9),len(substitute(B2:B5,",",""))),,5000),char(9)))),",","")  )),,50000),char(9)))&{"","",""}}, "select Col1, Count(Col2) group by Col1 pivot Col3") )

在第一个解决方案中,总计是用MMULT(见表)单独计算的,参考上面公式输出的表格。 E.g:

=arrayFormula({"Total", transpose(mmult(transpose(if(isblank((F2:J7)),0,(F2:J7))),row(F2:F7)^0))})

编辑/更新(在OP的第一个评论之后)

对于一个当然更容易维护的解决方案,请考虑以下步骤:

  1. 获取所有独特的水果(垂直):

    = ArrayFormula(唯一(修剪(转置(拆分)('来自CSV列的数据'!A2:A&"," ,, 50000)," ")))))

  2. 获取所有唯一名称(水平):

    = ArrayFormula(转置(唯一(转置(修剪(拆分(查询)' CSV列数据'!B2:B&"" ,, 50000)&# 34;,"))))))

    1. 现在用第一个水果旁边的名字填写表格,并在名字下面填写:
    2. = COUNTIF(过滤器('来自CSV列的数据'!$ A $ 2:$ A,regexmatch('来自CSV列的数据'!$ B $ 2:$ B,I $ 1 ))," "&安培; $ H2&安培;" &#34)

      其中I1是第一个名字,H2是第一个水果。

      1. 向下拖动最后一个公式,向右拖动。
      2. 这些步骤的示例是可见的here 请注意,提交新表单时,名称和水果列表将自动展开。只需要拖下COUNTIF公式......