Sort cell array based on 2 columns with date and time (strings)

5 ビュー (過去 30 日間)
Christos Antonakopoulos
Christos Antonakopoulos 2015 年 11 月 30 日
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.

採用された回答

Andrei Bobrov
Andrei Bobrov 2015 年 11 月 30 日
[~,ii] = sort(datenum(strcat(cellname(:,3),{' '},cellname(:,4))));
out = cellname(ii,:);
  2 件のコメント
Mohammad Abouali
Mohammad Abouali 2015 年 12 月 1 日
編集済み: Mohammad Abouali 2015 年 12 月 1 日
I remove my answer. I like yours more.
Christos Antonakopoulos
Christos Antonakopoulos 2015 年 12 月 1 日
Very good code Andrei thanx

サインインしてコメントする。

その他の回答 (1 件)

Stephen23
Stephen23 2015 年 11 月 30 日
編集済み: Stephen23 2015 年 11 月 30 日
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'
  1 件のコメント
Christos Antonakopoulos
Christos Antonakopoulos 2015 年 12 月 1 日
Thank you i will have this in mind with the iso 8601 dates.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeShifting and Sorting Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by