我在MATLAB中有一个表,前三列中有属性,第四列中有数据。我试图根据前三列对整个表进行排序。但是,其中一列(C列)包含月份(' 1月',' 2月' ...等)。 sortrows函数只允许我选择“提升”。或者'下降'但不是按月排序的自定义选项。任何帮助将不胜感激。以下是我使用的代码。
sortrows(表格,{' A栏',' B栏',' C栏'},{'提升',& #39;提升',' ???'})
答案 0 :(得分:0)
正如@ AnonSubmitter85建议的那样,您可以做的最好的事情是将月份名称转换为1
(1月)到12
(12月)的数值,如下所示:
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,:);