How to sort data once it is read into matlab
    11 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
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.
1 commentaire
Réponse acceptée
  Cedric
      
      
 le 18 Oct 2013
        
      Modifié(e) : Cedric
      
      
 le 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 commentaires
Plus de réponses (1)
  Vivek Selvam
    
 le 18 Oct 2013
        This should solve your problem.
data = textscan(fid, '%s %s %s');
instead of
data = textscan(fid, '%s %f %f');
Voir également
Catégories
				En savoir plus sur Shifting and Sorting Matrices dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



