【问题标题】: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   |
+------+-------+--------

有没有办法用公式来实现这一点,如果有,怎么做?还是只能通过脚本来实现?

非常感谢您在正确方向上的任何帮助或推动。

【问题讨论】:

标签: google-apps-script google-sheets google-sheets-formula unpivot


【解决方案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 &gt; 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;
};

定义后,您可以像使用任何工作表内置函数一样使用此函数:

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2018-03-01
    相关资源
    最近更新 更多