如何将日期矢量分成几天?

时间:2016-06-21 06:56:19

标签: matlab date

我有一个数据集,其中1列上的日期和另一列上的值

'4/26/2016'  23
'4/26/2016'  25
'4/26/2016'  1
'4/27/2016'  10
'4/27/2016'  40
'4/27/2016'  67
'4/28/2016'  24
'4/28/2016'  13
'4/28/2016'  7
'4/28/2016'  99

如何将值分隔到不同的日期?例如,2016年4月27日的值将为10,40和67,依此类推。根据我使用的数据集,日期可能会有所不同,因此没有固定日期。谢谢!

2 个答案:

答案 0 :(得分:2)

%% Your data
date = {'4/26/2016';'4/26/2016';'4/26/2016';'4/27/2016';...
    '4/27/2016';'4/27/2016';'4/28/2016';'4/28/2016';...
    '4/28/2016';'4/28/2016'};

data = [23; 25; 1; 10; 40; 67; 24; 13; 7; 99];

%% First convert the date to datenum for ease
date = datenum(date,'mm/dd/yyyy');

%% Get the number of days 
unique_days = unique(date);

%% Loop through the different days and extract corresponding data
%% - You might want to add unique identifiers to the variable names
for idx = 1:length(unique_days)
curr_day = unique_days(idx);  % Get current date
idx_days = date == curr_day;  % indices of data for current date
data_results{idx} = data(idx_days);   % results
end

答案 1 :(得分:2)

我们不知道您使用的数据结构,因此我们只需要假设它:

%% Your data
dates = {'4/26/2016';'4/26/2016';'4/26/2016';'4/27/2016';...
    '4/27/2016';'4/27/2016';'4/28/2016';'4/28/2016';...
    '4/28/2016';'4/28/2016'};

values = [23; 25; 1; 10; 40; 67; 24; 13; 7; 99];

[uniqueDates,~,sub] = unique(dates)
valuesPerDate = accumarray(sub, values, [], @(x){x})

%OPTIONAL
combined = [uniqueDates, valuesPerDate]

我实际上建议您首先将日期转换为新的datetime类型,即dates = datetime(dates),然后再转换为combined = [num2cell(uniqueDates), valuesPerDate],但如果没有,则至少使用更合理的格式,例如{ {1}}这样他们的字母顺序与他们的时间顺序相同。