2017-12-29 47 views
0

私は最初の3つのカラムの属性と4番目のカラムのデータを持つMATLABのテーブルを持っています。私は最初の3つの列に基づいてテーブル全体をソートしようとしていました。ただし、列(C列)の1つに月( 'January'、 'February' ...など)が含まれています。 sortrows関数は、 'ascend'または 'descend'を選択できますが、月単位でソートするカスタムオプションは選択できません。どんな助けでも大歓迎です。以下は、私が使用したコードです。月ごとのテーブルソート

SORTROWS(表、{ '列A'、 '列B'、 '列C'}、{ '上昇'、 '上昇'、 '???'})

+0

月を名前ではなく数字で表します。 – AnonSubmitter85

答えて

0

AnonSubmitter85が提案@ように、あなたができる最善のことは、次のように12(12月)に1(1月)から数値へのあなたの月名を変換することです:

c = { 
    7 1 'February'; 
    1 0 'April'; 
    2 1 'December'; 
    2 1 'January'; 
    5 1 'January'; 
}; 

t = cell2table(c,'VariableNames',{'ColumnA' 'ColumnB' 'ColumnC'}); 
t.ColumnC = month(datenum(t.ColumnC,'mmmm')); 

これは(あまりにもあなたColumnCするための標準的なソート基準へのアクセスを容易にしますこの例では、ascending):

t = sortrows(t,{'ColumnA' 'ColumnB' 'ColumnC'},{'ascend', 'ascend', 'ascend'}); 

私たちには分かっていない理由で、月をリテラルにしておく必要がある場合は、上記の方法を使用してテーブルのクローンをソートし、それに適用するという回避策を使用できます結果のインデックス:

c = { 
    7 1 'February'; 
    1 0 'April'; 
    2 1 'December'; 
    2 1 'January'; 
    5 1 'January'; 
}; 

t_original = cell2table(c,'VariableNames',{'ColumnA' 'ColumnB' 'ColumnC'}); 

t_clone = t_original; 
t_clone.ColumnC = month(datenum(t_clone.ColumnC,'mmmm')); 
[~,idx] = sortrows(t_clone,{'ColumnA' 'ColumnB' 'ColumnC'},{'ascend', 'ascend', 'ascend'}); 

t_original = t_original(idx,:); 
関連する問題