Форматирование данных из листа excel (два критерия) в MATLAB

У меня есть вопрос, связанный с недавно заданным другим. Я загружаю свои данные как 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;

person Joe    schedule 03.12.2017    source источник


Ответы (2)


ответ от albusSimba указывает правильное направление. Вы захотите собрать столбцы, содержащие ваши идентификаторы (например, data(:, [1 3])), передать их в unique с параметром 'rows', чтобы найти уникальные комбинации строк, а затем получить третий вывод для использования в качестве индекса для агрегирования с помощью 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
person gnovice    schedule 04.12.2017

Вы можете использовать этот код

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

И отформатируйте свои данные соответственно

person albusSimba    schedule 04.12.2017