Count the frequency of 2 consecutive days in a year

4 次查看(过去 30 天)
Dear all,
I want to obtain the frequency of 2 consecutive days in a year based on the following conditions/steps:
  1. I have a variable (R_3) with the daily data during 1992-2022.
  2. For a single year, obtain the days > 95th percentile. The 95th percentile is based on the entire period (1992-2022).
  3. Determine if there are any consecutive days. I have used backward difference for this.
  4. Determine if the consecutive days fall into the category of 2 consecutive days. If not ignore it.
  5. Total count in (4). E.g., 2 consecutive days fall on the 1st, 2nd, & 5th, 6th. This would give me 2 counts of 2 consecutive days.
I have attached my code below. I am having trouble with steps 4 & 5 and do not know how to proceed.
clear; clc;
load('Sample.mat');
% % Estimate the number of days during 1992-2022 ==========================
yr1 = 1992;
yr2 = 2022;
yr = yr1:yr2;
d1 = yeardays(yr); % Number of days per year
d2 = [1 d1(1:end-1)];
t1 = cumsum(d2);
t2 = cumsum(d1);
y1 = R_3;
for i = 1:size(t1,2)
a1{i,:} = find(y1(t1(i):t2(i)) > prctile(y1,95)); % Days where y1 > 95th percentile
a2 = cell2mat(a1(i));
a3 = diff(a2); % Backward difference
a4{i,:} = find(a3 == 1); % 1 == consecutive day
end
Thank you very much for your help.

回答(1 个)

Parag Jhunjhunwala
Parag Jhunjhunwala 2023-6-24
编辑:Parag Jhunjhunwala 2023-6-24
Hi Eli
I have modified the for loop in your code to find out the count of exactly 2 consecutive days for each year and stored it in the vector a3.
for i = 1:size(t1,2)
a1{i,:} = find(y1(t1(i):t2(i)) > prctile(y1,95)); % Days where y1 > 95th percentile
a2 = cell2mat(a1(i));
count=0;
a3(i) = 0; % Count exactly 2 consecutive days
for j=2:length(a2)
if(a2(j)-a2(j-1) == 1)
count = count+1;
else
if(count == 1)
a3(i) = a3(i)+1;
end
count=0;
end
end
if(count == 1)
a3(i) = a3(i)+1;
end
end

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

产品


版本

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by