使用matlab排列和排序数据

时间:2017-03-14 07:27:37

标签: matlab

我的数据是一个excel文件,其格式为两列:

Date           Type
3/12/06        A
3/12/06        B
3/12/06        B
3/12/06        C
6/01/07        A
6/01/07        A
8/01/07        B
...

A列是日期,可以重复,而B列是这些日期的观察类型。

在MATLAB中我想绘制每种类型作为时间的函数,但首先我需要安排我的数据。通常存在多个相同的行,这些行对应于同一日期的相同类型的多个观察。所以我想首先我需要计算某一类型在同一天发生了多少次?

任何帮助都会很棒!我仍处于尝试以正确格式阅读日期的阶段......

1 个答案:

答案 0 :(得分:3)

这是一个解决方案:我用特定的索引替换每个类型和每个日期,然后我使用accumarray创建一个2D数据透视表。您也可以直接使用excel中的功能数据透视表。

% We load the xls file.
[~,txt] = xlsread('test.xls');
% We delete the header:
txt(1,:) = [];
% Value and index for the date:
[val_d,~,ind_d] = unique(txt(:,1));
% Value and index for the type:
[val_c,~,ind_c] = unique(txt(:,2));
% We use accumarray to create a pivot table that count each occurence.
acc = accumarray([ind_d,ind_c],1)

% Then we simply plot the result:
dateFormat = 'dd/mm/yy';   
for i = 1:length(val_c);
  subplot(1,length(val_c),i)
  bar(datenum(val_d,dateFormat),acc(:,i),1) % easier to deal with datenum
  datetick('x',dateFormat)
  xlabel('Date')
  ylabel([val_c{i},' count'])
  ylim([0,3])
end

<强>结果:

enter image description here