How can I track time periods under certain criteria?

1 visualizzazione (ultimi 30 giorni)
Hello everyone!
I would appreciate your help on this. I have a dataset of daily counts of temperature (please find attached) for 11 years, 2006-2016.
What I want to do is to find all time periods that demonstrate three or more consecutive days with temperature higher than the 95th percentile (this way I am trying to locate heat waves). I also need the respective dates.
What I have tried so far
m=1;
days=0;
for i = 1: length(Daily_Meteo.Daily_T)
if Daily_Meteo.Daily_T(i)> 28
days = days + 1;
if days >= 3;
HWs(m,:) = Daily_Data.Daily_DATE(i);
m=m+1;
end
end
end
The problem is that HWs(m,:) holds all days with T>28oC, but I want only 3 or more consecutive days...
Thank you in advance!
PS. I am on R2019b.

Risposta accettata

Duncan Po
Duncan Po il 18 Feb 2021
You can put your data in a timetable and then use movsum like this:
tt = readtimetable('Daily_Data_Thessaloniki.xlsx');
tt.threehotdays = (movsum(tt.Daily_T > 28, [2 0]) == 3) ; % find all days when it and the previous 2 days are all above 28 degrees
  6 Commenti
Daphne PARLIARI
Daphne PARLIARI il 26 Feb 2021
Thank you Duncan.
Is there a way to also count the number of HW episodes?
Duncan Po
Duncan Po il 26 Feb 2021
Use diff:
d = diff(tt.threehotdays) == 1; % d is 1 at transition from 0 to 1
loc = find(d) + 1; % +1 because diff output starts at 2nd position

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Get Started with Phased Array System Toolbox in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by