Sorting a cell array rows according to string column alphabetically

Hi everyone, a matlab beginner question :
I have a cell array like the following:
I want to sort the array rows alphabetically according to the first column. (and I want the first row to stay at the top as it is the header row)
I have tried to use sort and sortrows but I am getting the error : Error using sort Input argument must be a cell array of character vectors.
How can I sort this cell array?
Thanks

Respuestas (1)

Assuming your cell array is namens C:
C = {'c1' 'c2','c3' ; 'c' 1 2 ; 'a' 2 3 ; 'b' 3 4}
[~, ix] = sort(C(2:end,1)) % sort the first column from 2nd row onwards and get the indices
C(2:end,:) = C(ix+1,:) % do not forget to add a 1 :)

4 comentarios

amonasro
amonasro el 8 de Nov. de 2017
Editada: amonasro el 8 de Nov. de 2017
My cell array has the name output.
the declaration is like this: output = cell(100,14);
here is the error I am getting :
Error using sort Input argument must be a cell array of character vectors.
Error in myfunc (line 75) [~, ix] = sort(output(2:end,1));
apparently some cells in the first column are not character vectors! You can check this using cellfun
tf = cellfun(@ischar, output(2:end,1))
What do want to do with these cells (rows)?
the result of cellfun : K>> cellfun(@ischar, output(2:end,1))
ans =
13×1 logical array
0
0
0
0
0
0
0
0
0
0
0
0
0
But the assignments are like for example :
output{2,1} = {'lorem'};
or
fid = fopen(inputArg1, 'r');
tline = fgetl(fid);
C = strsplit(tline);
output{1, 4} = C(1);
What do you think is the problem here with the types?
the content of the cells are not character arrays, but a cell containing a character array! See the differences between:
C1(1) = {'aaa'}
C2{1} = {'bbb'}
C3{1} = 'ccc'

Iniciar sesión para comentar.

Categorías

Preguntada:

el 8 de Nov. de 2017

Comentada:

el 9 de Nov. de 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by