is it possible to put dates into a loop used in timerange function?
for i=2012:2016;
s(i)=timerange('i-01-01','i-02-01')
end

 Réponse acceptée

Steven Lord
Steven Lord le 20 Oct 2019

1 vote

Yes. Build datetime objects using the three-input syntax and use them to construct a timerange. I left off one of the semicolons in the example below so you can see that at each iteration a different timerange was built with a different year.
for theyear = 2012:2016
beginDate = datetime(theyear, 01, 01);
endDate = datetime(theyear, 02, 01);
TR = timerange(beginDate, endDate)
% Do something with TR
end

3 commentaires

Ugur Acar
Ugur Acar le 20 Oct 2019
building datetime objects works, thank you.
I got timetable TT with some missing data;
TT_int = retime(TT,'hourly','linear'); %Fill missing data using Linear interpolation
for i=2012:2016;
beginDate=datetime(i,01,01);
endDate=datetime(i,02,01);
TR=timerange(beginDate,endDate);
TT_january = TT_int(TR,:);
TT_mean=retime(TT_january,'daily','mean');
end
i did like this. but TT_mean timetablecreated just for the last year (2016),
i need the keep the data created for the other years also (2012-2013-2014-2015);
Ugur Acar
Ugur Acar le 20 Oct 2019
i guess i did it
for i=2012:2016;
beginDate=datetime(i,01,01);
endDate=datetime(i,02,01);
TR=timerange(beginDate,endDate);
TT_january = TT_int(TR,:);
TT_mean=retime(TT_january,'daily','mean');
for j=1:size(TT_mean,1);
TT_mean_jan(j,i-2011)=([TT_mean{j,1}]);
end
end
Steven Lord
Steven Lord le 20 Oct 2019
i did like this. but TT_mean timetablecreated just for the last year (2016),
Yes, that's correct. Each iteration through the loop you're overwriting the TT_mean variable.
i need the keep the data created for the other years also (2012-2013-2014-2015);
You could store it in a cell array, in a struct array, do whatever further processing you want to do on the January data inside the loop, or perhaps skip the timerange altogether and use groupsummary or grouptransform.

Connectez-vous pour commenter.

Plus de réponses (2)

Sulaymon Eshkabilov
Sulaymon Eshkabilov le 19 Oct 2019

1 vote

Hi,
What about this:
for ii=2012:2016
H{ii-2011} = [num2str(ii), '-01-01',' : ', num2str(ii), '-02-01'];
end
Good luck.

1 commentaire

Ugur Acar
Ugur Acar le 19 Oct 2019
i tried this;
H{1} = [num2str(2012), '-01-01'];
H{2} = [num2str(2012), '-02-01'];
TR = timerange(H{1},H{2});
doesnt worked :(
timerange function works like that;
TR = timerange('2012-01-01','2012-02-01');
because of apostrophe may be.

Connectez-vous pour commenter.

Sulaymon Eshkabilov
Sulaymon Eshkabilov le 19 Oct 2019

1 vote

How about this way:
for ii=2012:2016
H{ii-2011,1} = [num2str(ii), '-01-01'];
H{ii-2011, 2}= [num2str(ii), '-02-01'];
end

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by