MATLAB: I have “teste1” cell array column with values from 0 to 5. I want to separate the rows by number (0, 1, 2, 3, 4, 5) into the respective new cell array. How to proceed

cellcell arraycell arrays

A new cell with 0's, another one with 1's, and so on..
However, it would be even better if the rows would not change position in the new cells. Like, if the first 0 is in row 1567, in the new cell this value should appear on the same row positio and not in the first row. How can I do this?

Best Answer

colvals = cell2mat(YourCellArray(:,TheAppropriateColumnNumber));
EmptyCellArray = cell(size(YourCellArray));
NewCell = cell(1,6);
for K = 0 : 5
temp = EmptyCellArray;
mask = colvals == K;
temp(mask) = YourCellArray(mask, :);
NewCell{K+1} = temp;
end
Now, NewCell{J} corresponds to column value J-1, and will be a cell array in which the row entries are all empty for the rows where the column value was not J-1 and will copy the row if the column value for the row is J-1 .
This is necessary in order to keep each row at its same location in the destination array.
I suspect this is not what you actually want. I suspect that you want to do the equivalent of sorting by the column value, with all the entries for the same value kept in the same relative order. If that is what you want then,
colvals = cell2mat(YourCellArray(:,TheAppropriateColumnNumber));
[~, sortidx] = sort(colvals, 'stable');
NewCell = YourCellArray(sortidx, :);