【问题标题】:Formatting data from an excel sheet (two criteria) in MATLAB在 MATLAB 中格式化来自 excel 工作表(两个标准)的数据
【发布时间】:2018-05-17 08:21:03
【问题描述】:

我最近有一个与another one 相关的问题。我将我的数据下载为csv.file。然后我在 MATLAB 中对其进行格式化。我获得了格式化的数据,例如:

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

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

我尝试了@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;

【问题讨论】:

    标签: matlab formatting accumarray


    【解决方案1】:

    您可以使用此代码

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

    并相应地格式化您的数据

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 2018-01-03
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 2014-03-22
        相关资源
        最近更新 更多