我有一个数据集,其中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,依此类推。根据我使用的数据集,日期可能会有所不同,因此没有固定日期。谢谢!
答案 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}}这样他们的字母顺序与他们的时间顺序相同。