How to sort data once it is read into matlab
2 views (last 30 days)
Show older comments
I am trying to sort the attached file first by column 1, then by column 3. I have tried the following code:
fid = fopen(filename);
data = textscan(fid, '%s %f %f');
fclose(fid);
matrix_data = [data{:}];
sort_data = sortrows(matrix_data, [1,3]);
This tells me that CAT arguments dimensions are not consistent.
Could someone tell me what is wrong with this code?
Thanks.
Accepted Answer
Cedric
on 18 Oct 2013
Edited: Cedric
on 18 Oct 2013
The first column of data is a cell array of strings, whereas columns 2 and 3 are numeric arrays. You cannot concatenate them without performing first a conversion. You can also convert numeric arrays to cell arrays and have both strings and numbers in a large cell array. E.g.
matrix_data = [data{1}, num2cell(data{2}), num2cell(data{3})] ;
or
matrix_data = [data{1}, num2cell([data{2:3}])] ;
that you can then sort:
>> sort_data = sortrows(matrix_data, [1,3])
sort_data =
'A88888888888888888880011' [-65] [ 1]
'A88888888888888888880011' [-52] [ 2]
'A88888888888888888880011' [-64] [ 3]
'A88888888888888888880011' [-52] [ 4]
'A88888888888888888880011' [-57] [ 5]
'A88888888888888888880011' [-65] [ 6]
'A88888888888888888880011' [-57] [ 7]
'A88888888888888888880011' [-55] [ 8]
'A88888888888888888880012' [-66] [ 9]
'A88888888888888888880012' [-52] [10]
'A88888888888888888880012' [-68] [11]
'A88888888888888888880012' [-64] [12]
'A88888888888888888880012' [-44] [13]
'A88888888888888888880012' [-64] [14]
'A88888888888888888880012' [-40] [15]
'A88888888888888888880012' [-51] [16]
'A88888888888888888880013' [-55] [17]
'A88888888888888888880013' [-57] [18]
'A88888888888888888880013' [-49] [19]
'A88888888888888888880013' [-47] [20]
'A88888888888888888880013' [-64] [21]
'A88888888888888888880013' [-60] [22]
'A88888888888888888880013' [-67] [23]
'A88888888888888888880013' [-61] [24]
0 Comments
More Answers (1)
Vivek Selvam
on 18 Oct 2013
This should solve your problem.
data = textscan(fid, '%s %s %s');
instead of
data = textscan(fid, '%s %f %f');
See Also
Categories
Find more on Cell Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!