# Extracting multiple row values (with unequal range) in a column separately

1 view (last 30 days)
ANIE on 23 Jun 2022
Commented: Mathieu NOE on 23 Jun 2022
I have a csv file 28526 x 1. These are a single variable for 45 years. I want to find the mean of 45 years (45 x1) seperately. But all 45 years unequal ranges. How to find the mean?
-----------------------------------------------------------------------------------
clc;clear all
b = a(20279:20981, 1);
b(b == 9999) = NaN;
c = b/10;
d = mean(c,'omitnan');
--------------------------------------------------------------------------------------
Here I am selecting each range of values and calculating mean seperately for each year. Please advice on how to do it together.
##### 2 CommentsShowHide 1 older comment
ANIE on 23 Jun 2022
please find the data file attached. The header P DEW seperates each year

Mathieu NOE on 23 Jun 2022
hello
try this :
clc;clear all
ind_header = find(isnan(a)); % lines with 'P DEW' (seperates each year)
% this for loop will do the yearly averaging on data between first and last
% detected lines with 'P DEW' - data before the first P DEW and data after
% the last P DEW mark are not computed
data = a(start:stop);
data(data > 9000) = NaN; % remove the 9999 from data (using > 9000 instead of == 9999 for potential rounding issues
d(ci) = mean(data/10,'omitnan');
end
plot(d)
Mathieu NOE on 23 Jun 2022
My pleasure !

Jonas on 23 Jun 2022
Edited: Jonas on 23 Jun 2022
dat(dat==9999)=[];
whereIsNan=find(isnan(dat));
yourMeans=zeros(1,numel(whereIsNan)+1);
for partNr=1:numel(whereIsNan)+1
if partNr==1
currVec=dat(1:whereIsNan(partNr(1))-1);
elseif partNr==numel(whereIsNan)+1
currVec=dat(whereIsNan(end)+1:end);
else
currVec=dat(whereIsNan(partNr-1)+1:whereIsNan(partNr)-1);
end
yourMeans(partNr)=mean(currVec);
end
ANIE on 23 Jun 2022
Thanks a lot. This also works. Only I had to divide it by 10 as i needed the matrix in fraction.