我从csv文件中导入了一个名为时间的1xn矩阵。有没有办法通过遵循时间模式来扩展这个矩阵(这样每月的天数就可以工作了)?例如,如果我从开始。
time =
'"2013-05-01"'
'"2013-05-02"'
'"2013-05-03"'
'"2013-05-04"'
'"2013-05-05"'
不知何故,加上5个观测值,我的矩阵变成了:
time =
'"2013-05-01"'
'"2013-05-02"'
'"2013-05-03"'
'"2013-05-04"'
'"2013-05-05"'
'"2013-05-06"'
'"2013-05-07"'
'"2013-05-08"'
'"2013-05-09"'
'"2013-05-10"'
-
如果
time
是字符矩阵:N = 5; %// how many dates to add lastdate = datenum(strrep(time(end,:),'"',''),29); %// last available date time = [time; [repmat('"',N,1) datestr(lastdate+(1:N),29) repmat('"',N,1)] ];
-
如果
time
是一个单元阵列,只需将最后一行替换为time = [time; mat2cell([repmat('"',N,1) datestr(lastdate+(1:N),29) repmat('"',N,1)],ones(1,N)) ];
这是通过读取最后一个字符串日期,用datenum
转换为数字日期,生成N
新的连续日期,然后用datestr
转换回字符串来实现的。双引号单独处理。
示例:
>>time = ['"2013-05-04"'; '"2013-05-05"']
time =
"2013-05-04"
"2013-05-05"
给出
>> N = 5; %// how many dates to add
lastdate = datenum(strrep(time(end,:),'"',''),29); %// last available date
time = [time; [repmat('"',N,1) datestr(lastdate+(1:N),29) repmat('"',N,1)] ]
time =
"2013-05-04"
"2013-05-05"
"2013-05-06"
"2013-05-07"
"2013-05-08"
"2013-05-09"
"2013-05-10"
我假设time
是一个单元格数组:
t = cell2mat(time);
n = 5;
t = datenum(t,'"yyyy-mm-dd"'); % using custom format
tdiff = t(end)-t(end-1); % assuming
l = length(t);
newtime = zeros(l+n,1);
newtime(1:l)=t;
newtime(l+1:end) = (t(end)+tdiff):tdiff:(t(end)+tdiff*n);
您可以使用datestr
将其转换回您选择的日期格式。