Форматирование данных из таблицы 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;
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
Вы можете использовать этот код
C = unique([identifier_1,identifier_2],'rows')
И соответственно отформатируйте ваши данные