Форматирование данных из таблицы 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