create a variable based on timetable's date period
    5 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Sehoon Chang
 el 1 de Oct. de 2020
  
    
    
    
    
    Comentada: Star Strider
      
      
 el 1 de Oct. de 2020
            Hello dear advisors. 
i wish to create a new variable (HP) for my timetable (TT) which datetime covers for multiple years.
For the periods in between 01.October till 30.April of each year available within the timetable, each timestamp shall get the value of 1 as a variable HP.
And as for the rest (01.May till 30.September), each remaining timestamps shall get the value of 0 as a variable of HP.     
for example:

thanks!
0 comentarios
Respuesta aceptada
  Star Strider
      
      
 el 1 de Oct. de 2020
        Try this: 
DT = (datetime([2017 01 01]):caldays(1):datetime([2020 01 01])).';                              % Create Dates
HP = ones(size(DT));                                                                            % Create ‘HP’
TT = timetable(DT,HP);                                                                          % Create ‘timetable’
TF = [(TT.DT(day(TT.DT)==1 & month(TT.DT)==5)) (TT.DT(day(TT.DT)==30 & month(TT.DT)==9))];      % Starting & Ending Dates For All Years
for k = 1:size(TF,1)
    TT.HP(TF(k,1) : TF(k,2),:) = 0;                                                             % Loop Through Years
end
Check = [TT(115:125,:); TT(270:280,:)];                                                         % Check That It Works! (Delete Later)
CheckPlus1Yr = [TT((115:125)+365,:); TT((270:280)+365,:)];                                      % Check That It Works! (Delete Later)
Use the ‘TF’ matrix and the loop with your own timetable.  
I called my datetime variable ‘DT’ to avoid using ‘datetime’ as a variable name.  
The ‘Check’ lines show parts of the timetable demonstrating that this approach works.  They are not otherwise a necessary part of the code, so delete them later.  
2 comentarios
Más respuestas (1)
  Steven Lord
    
      
 el 1 de Oct. de 2020
        
      Editada: Steven Lord
    
      
 el 1 de Oct. de 2020
  
      Using the sample timetable Star Strider created:
DT = (datetime([2017 01 01]):caldays(1):datetime([2020 01 01])).';
HP = ones(size(DT));
TT = timetable(DT,HP);
Get the list of months for each row in the timetable:
M = month(TT.DT);
Determine which months are between May (5th month) and September (9th month) inclusive.
isInRangeFor0 = ismember(M, 5:9);
Create the new variable. Since isInRangeFor0 is true when we want the new variable to have value 0 and vice versa, we can just negate that variable.
TT.newvar = ~isInRangeFor0;
1 comentario
  Star Strider
      
      
 el 1 de Oct. de 2020
				That’s definitely  an interesting alternative.  
Using ismember for the months didn’t occur to me.  I’ll definitely keep that in mind!  
Ver también
Categorías
				Más información sobre Dates and Time en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!