Sort cell array based on 2 columns with date and time (strings)
    6 views (last 30 days)
  
       Show older comments
    
    Christos Antonakopoulos
 on 30 Nov 2015
  
    
    
    
    
    Commented: Christos Antonakopoulos
 on 1 Dec 2015
            Hello, i have a cell array 395*8 cell.
Columns 3 and 4 have
'01/20/2014'  '19:22:05.0120'
'01/15/2014'  '19:22:20.8020'
'01/17/2014'  '20:01:26.0630'
'01/16/2014'  '20:04:21.1260'
and so on.
How can i sort them based firstly on column 3 and then column 4.
sortrows did not work
sortrows(cellname,[3 4]) because i have string values.
0 Comments
Accepted Answer
  Andrei Bobrov
      
      
 on 30 Nov 2015
        [~,ii] = sort(datenum(strcat(cellname(:,3),{' '},cellname(:,4))));
out = cellname(ii,:);
2 Comments
  Mohammad Abouali
      
 on 1 Dec 2015
				
      Edited: Mohammad Abouali
      
 on 1 Dec 2015
  
			I remove my answer. I like yours more.
More Answers (1)
  Stephen23
      
      
 on 30 Nov 2015
        
      Edited: Stephen23
      
      
 on 30 Nov 2015
  
      This is trivial if ISO 8601 date strings are used, because then a lexicographical sort really does put them into the correct date order:
% Original cell array:
X = {
 1, 5, '01/20/2014',  '19:22:05.0120'; ...
 2, 6, '01/15/2014',  '19:22:20.8020'; ...
 3, 7, '01/17/2014',  '20:01:26.0630'; ...
 4, 8, '01/16/2014',  '20:04:21.1260'};
% replace date strings with ISO 8601 dates:
X(:,3) = cellstr(datestr(datevec(X(:,3),'mm/dd/yyyy'),29));
% sort:
[~,idx] = sortrows(X(:,3:4));
Y = X(idx,:)
gives us this output:
Y = 
    [2]    [6]    '2014-01-15'    '19:22:20.8020'
    [4]    [8]    '2014-01-16'    '20:04:21.1260'
    [3]    [7]    '2014-01-17'    '20:01:26.0630'
    [1]    [5]    '2014-01-20'    '19:22:05.0120'
See Also
Categories
				Find more on Shifting and Sorting Matrices 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!


