如何从 google 工作表中的两个 csv 列创建矩阵?

How to create a matrix from two csv columns in google sheets?

我正在使用 google 表单将数据输入到 google 传播sheet。我有两列包含 CSV 格式的数据。

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

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

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

谢谢!

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 单独计算的(参见 sheet),参考上述公式输出的 table。例如:

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

EDIT/UPDATE(在 OP 的第一条评论之后)

对于肯定更易于维护的解决方案,请考虑以下步骤:

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

    =ArrayFormula(唯一(trim(转置(拆分(查询('Data from CSV Columns'!A2:A&",",50000),","))))

  2. 获取所有唯一名称(横向):

    =ArrayFormula(转置(唯一(转置(trim(拆分(查询('Data from CSV Columns'!B2:B&",",50000),","))))))

    1. 现在用计数填充 table.. 在第一个水果旁边和名字下面:

    =COUNTIF(过滤器('Data from CSV Columns'!$A$2:$A, regexmatch('Data from CSV Columns'!$B$2:$B,I$1)),"" &$H2&"")

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

  1. 将最后一个公式向下并向右拖动以适合。

可以看到这些步骤的示例 here 请注意,当提交新表单时,包含名称和水果的列表将自动扩展。只有 COUNTIF 公式需要向下拖动...