필터 지우기
필터 지우기

Calculating annual means for different time periods

조회 수: 5 (최근 30일)
Anna
Anna 2011년 9월 23일
Hello,
I am trying to calculate annual means from monthly data for a number of basins with different time periods.
my data looks something like this:
time (year/month) Amazon Congo .....
195101 6430 4356
195102 2530 7960
195103 1820 2060
..... ..... .....
..... ..... .....
..... ..... .....
200610 16200 NaN
200611 6540 NaN
200612 9870 NaN
and so on. In addition I have two variables specifying the start and end years of the records for each basin as they differ from one basin to another:
start end
195101 200012
195601 199312
197101 200612
..... .....
So my questions is: how can I tell matlab to calculate the mean of each year (mean 195101-195112 and so on) and also tell it to start and end calculations at a particular year depending on the basin?
Cheers, Anna
  댓글 수: 4
Artur M. G. Lourenço
Artur M. G. Lourenço 2011년 9월 23일
in vertical change to
my1 = mean(amazon(1,1:12))
for stop the mean you can use an 'for':
for n = 1:12
my1 = mean(amazon(1,n))
end
Anna
Anna 2011년 9월 23일
Sorry perhaps I didn't make myself very clear. So I have vertical columns (the formatting's gone very funny for some reason) for time and runoff in different basins. I have 33 basins in total so I would like to calculate the mean using a loop. I need the annual mean for every year (so for example 195101-195112, 195101-195212, 195301-195312 and so on) but the problem is the time period I want to calculate the annual means varies according to the basin. So, for example, for Amazon I want the mean for 1951-2006 but for Congo i want it for 1951-1990. How can I specify this in a loop?
As I said I have a variable for the start year (a vertical column with a value for each basin) and for the end year. I just don't know how to include this in the loop.
hope this makes sense. thanks for your help :)

댓글을 달려면 로그인하십시오.

채택된 답변

Andrei Bobrov
Andrei Bobrov 2011년 9월 23일
variant
corrected [14:14 MDT]
%{
data - your array (double array) in view :
data = [195101 6430 4356
195102 2530 7960
195103 1820 2060
200610 16200 NaN
200611 6540 NaN
200612 9870 NaN]
%}
dy = datevec(num2str(data(:,1)),'yyyymm');
d1 = [dy(:,1), data(:,2:end)];
t = unique(d1(:,1));
outdata = [t, nan(numel(t),size(data,2)-1)];
for j1 = 2:size(data,2)
t2 = ~isnan(d1(:,j1));
yrs = unique(d1(t2,1));
i1 = ismember(outdata(:,1),yrs);
outdata(i1,j1) = cellfun(@mean,mat2cell(data(t2,j1),histc(d1(t2,1),yrs),1));
end
  댓글 수: 3
Anna
Anna 2011년 9월 26일
Hi Andrei and Eng_Amb,
thanks a lot for your answers!
I just have one more question. I ran the first line (d1=[year....) and got the following error: 'Undefined function or method 'year' for input arguments of type 'char''.
How can I get past this error? I'm not entirely sure what year is referring to, whether it is a variable or a matlab function/input argument, so it would be great if you could clarify.
Also, what does 't' refer to on the second line?
thanks again :)
Andrei Bobrov
Andrei Bobrov 2011년 9월 26일
You do not have a Financial Toolbox.
See corrected

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Walter Roberson
Walter Roberson 2011년 9월 23일
I suggest you look for John D'Errico's File Exchange contribution named consolidator.

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by