如何从 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 的第一条评论之后)
对于肯定更易于维护的解决方案,请考虑以下步骤:
获取所有独特的水果(垂直):
=ArrayFormula(唯一(trim(转置(拆分(查询('Data from CSV Columns'!A2:A&",",50000),","))))
获取所有唯一名称(横向):
=ArrayFormula(转置(唯一(转置(trim(拆分(查询('Data from CSV Columns'!B2:B&",",50000),","))))))
- 现在用计数填充 table.. 在第一个水果旁边和名字下面:
=COUNTIF(过滤器('Data from CSV Columns'!$A$2:$A, regexmatch('Data from CSV Columns'!$B$2:$B,I$1)),"" &$H2&"")
其中 I1 是名字,H2 是第一个水果。
- 将最后一个公式向下并向右拖动以适合。
可以看到这些步骤的示例 here
请注意,当提交新表单时,包含名称和水果的列表将自动扩展。只有 COUNTIF 公式需要向下拖动...
我正在使用 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 的第一条评论之后)
对于肯定更易于维护的解决方案,请考虑以下步骤:
获取所有独特的水果(垂直):
=ArrayFormula(唯一(trim(转置(拆分(查询('Data from CSV Columns'!A2:A&",",50000),","))))
获取所有唯一名称(横向):
=ArrayFormula(转置(唯一(转置(trim(拆分(查询('Data from CSV Columns'!B2:B&",",50000),","))))))
- 现在用计数填充 table.. 在第一个水果旁边和名字下面:
=COUNTIF(过滤器('Data from CSV Columns'!$A$2:$A, regexmatch('Data from CSV Columns'!$B$2:$B,I$1)),"" &$H2&"")
其中 I1 是名字,H2 是第一个水果。
- 将最后一个公式向下并向右拖动以适合。
可以看到这些步骤的示例 here 请注意,当提交新表单时,包含名称和水果的列表将自动扩展。只有 COUNTIF 公式需要向下拖动...