在MATLAB中格式化excel表中的数据(两个标准)

时间:2017-12-03 21:50:09

标签: matlab formatting accumarray

我最近问了一个与another one相关的问题。我将数据下载为csv.file。然后我在MATLAB中格式化它。我obtan格式化数据,如:

enter image description here

我想格式化数据,以便获得:

enter image description here

换句话说,日期应该在第一列,而两个标识符应分别在前两行。

我尝试了@gnovice提供的代码,但我有问题要调整第二个标识符。代码是:

A = accumarray([rowIndex colIndex], data(:, 4), [], @(x) x(1));
A = [NaN colVals; rowVals A];

其中data等于图片(1)。

因此,我获得了一个矩阵A,如:

 A = 
      NaN     1    2     3;
 20160101   100   80    90;
 20170101   150   90   200;

如何以第二个标识符处理的方式调整我的代码并A变为:

 A = 
      NaN     1    2     3;
      NaN    10   10    15;
 20160101   100   80    90;
 20170101   150   90   200;

2 个答案:

答案 0 :(得分:2)

您可以使用此代码

C = unique([identifier_1,identifier_2],'rows')

并相应地格式化数据

答案 1 :(得分:1)

answer from albusSimba指向正确的方向。您需要收集包含您的标识符的列(即data(:, [1 3])),并使用'rows'选项将其传递给unique以查找唯一的行组合,然后捕获要使用的第三个输出作为accumarray聚合的索引。然后,您的最终矩阵格式必须更改为第二个标识符的帐户:

[rowVals, ~, rowIndex] = unique(data(:, 2));
[colVals, ~, colIndex] = unique(data(:, [1 3]), 'rows');
A = accumarray([rowIndex colIndex], data(:, 4), [], @(x) x(1));
A = [NaN colVals(:, 1).'; NaN colVals(:, 2).'; rowVals A];

您的样本数据的结果:

A =

         NaN           1           2           3
         NaN          10          10          15
    20160101         100          80         200
    20170101         150          90         200