Форматирование данных из таблицы Excel в MATLAB

Я импортирую данные из файла Excel с помощью команды xlsread, Данные выглядят следующим образом:

Я хотел бы отформатировать эти данные так, чтобы выходные данные выглядели так:

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

В Excel я бы использовал сводную таблицу. Есть ли в MATLAB эквивалент или как мне начать это кодировать? Является reshape вариант здесь?

1 ответ

Решение

Я предполагаю, что вы читаете ваши данные из файла следующим образом:

data = xlsread('your_file.xls');

Что дает вам числовую матрицу, содержащую ваши данные. Затем вы можете реорганизовать его, проанализировав первый и последний столбцы, используя unique затем использовать результаты в качестве индексов в accumarray собирать данные в центральном столбце. Затем вы просто добавляете метки строк и столбцов:

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

И результат, для ваших примеров данных выше:

A =

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

Если у вас есть повторяющиеся записи (то есть записи с одинаковой датой и идентификатором), по умолчанию сумма будет суммирована. Вы можете предоставить дескриптор функции для accumarray если ты хочешь сделать что-то еще Например:

A = accumarray([rowIndex colIndex], data(:, 2), [], @mean);      % Averages them
A = accumarray([rowIndex colIndex], data(:, 2), [], @(x) x(1));  % Keeps the first entry
Другие вопросы по тегам