Сортировка смешанной текстово-числовой матрицы (массива ячеек) по одному из (числовых) столбцов - PullRequest
0 голосов
/ 01 мая 2019

У меня есть таблица Excel, строки которой я хочу произвольно перемешать и использовать в Matlab. Для этого я читаю XLS в массив ячеек, генерирую случайные числа в столбце, а затем сортирую по этому столбцу. Это оказывается проблематичным из-за конфликтующих типов переменных. Код, который я использовал:

[num, txt, M] = xlsread(fileName);
for row=2:row_N % generate random numbers in the D column
    M(row,4) = num2cell(rand);
end
M = sortrows(M,4);

Это приводит к тому, что моя матрица выглядит так:

enter image description here

Поскольку столбец D содержит числа, в то время как в других столбцах есть текст, сортировка не может быть выполнена (там говорится: «Элементы ячейки должны быть символьными массивами»).

Я пробовал различные преобразования между числовыми переменными и переменными ячейки, а также пытался использовать «readtable» вместо «xlsread» - но всегда есть проблема, такая, что я не могу решить этот конфликт. Какие-либо предложения? Использование Matlab 2016a.

1 Ответ

1 голос
/ 01 мая 2019

Если я понимаю вашу цель, я думаю, что это делает это. Вы можете получить разные имена полей из importdata, и вам придется их изменить, но, если вы этого не сделаете, это должно охватить это.

% import the data
impdata=importdata('temp.xlsx');

% get rid of the headers
oldcellarray=impdata.textdata(2:end,:);

%resort the rows in a random order
newcellarray=oldcellarray(randperm(size(oldcellarray,1)),:);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...