如何将数据从矩阵转为向量? [复制]
Posted
技术标签:
【中文标题】如何将数据从矩阵转为向量? [复制]【英文标题】:How to unpivot data from a matrix to a vector? [duplicate] 【发布时间】:2020-02-26 09:40:10 【问题描述】:我有一张这样的表格:
+---------------------------+
|date | jan 1 | jan2 |jan3 |
+---------------------------+
|empl1 | 3 | 5 |8 |
+---------------------------+
|empl2 | 4 | 7 |6 |
+---------------------------+
|empl3 | 1 | 2 |9 |
+---------------------------+
我想取消透视,所以它看起来像这样:
+------+-------+--------
|empl1 | jan 1 | 3 |
+----------------------+
|empl2 | jan 1 | 4 |
+----------------------+
|empl3 | jan 1 | 1 |
+----------------------+
|empl1 | jan2 | 5 |
+----------------------+
|empl2 | jan2 | 7 |
+----------------------+
|empl3 | jan2 | 2 |
+----------------------+
|empl1 | jan3 | 8 |
+----------------------+
|empl2 | jan3 | 6 |
+----------------------+
|empl3 | jan3 | 9 |
+------+-------+--------
有没有办法用公式来实现这一点,如果有,怎么做?还是只能通过脚本来实现?
非常感谢您在正确方向上的任何帮助或推动。
【问题讨论】:
Search 【参考方案1】:方法一:使用内置函数:
=ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(TEXTJOIN(":",FALSE,FILTER(A2:A&","&B1:D1&","&B2:D,A2:A<>"")),":",TRUE,FALSE)),",",TRUE,FALSE))
方法二:使用 Apps Script 自定义函数:
您可以使用 Apps 脚本 Custom Function 来做到这一点。
首先,通过选择Tools > Script editor
打开一个绑定脚本,并将以下函数复制到脚本中(检查内联cmets):
function matrixToVector(values)
var output = [];
var headers = values.shift(); // Remove and retrieve the headers row
for (var i = 1; i < values[0].length; i++) // Iterate through each column
for (var j = 0; j < values.length; j++) // Iterate through each row
output.push([values[j][0], headers[i], values[j][i]]);
return output;
;
定义后,您可以像使用任何工作表内置函数一样使用此函数:
参考:
Custom Functions in Google Sheets【讨论】:
以上是关于如何将数据从矩阵转为向量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章