Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

How to convert daily data to monthly?

Asked by Mohammad on 5 Dec 2012
Latest activity Answered by Chad Greene on 5 Nov 2014

I have huge number of precipitation daily data in a column (say for 60 years) for 400 meteorological stations. Now I need to convert it to monthly. How can I do that? thanks.


per isakson on 5 Dec 2012

Months have 28, 29, 30 or 31 days, which makes it a bit tricky.

Do you have a table with

    date, value 

rather than just a column?

Does the length of the months matter?

Mohammad on 5 Dec 2012

my data format is Year Month Day data

that is in 4 column. Length of month is always 30. Does it help for providing your answer? thanks.



No products are associated with this question.

4 Answers

Answer by Babak on 5 Dec 2012

Every 30 data rows, I would average them out and save it in 1 row.This way, 30 days shrinks down to 1 data (a month). Or another way, you can simply delete 29 data rows and keep only one from every 30 data rows.


Mohammad on 5 Dec 2012

Thanks. But please provide answer through matlab function.

Babak on 5 Dec 2012

you need to write what your variables are and we would know which format they are... I mean what type they are for example, string? double, or cell? moreover they are all in a matrix or a cell or how you ahev sorted them..

Answer by Andrei Bobrov on 5 Dec 2012
Edited by Andrei Bobrov on 5 Dec 2012

one way

M - your data matrix with 4 columns < Year Month Day data > - double type

[a,~,c] = unique(M(:,1:2),'rows');
out = [a, accumarray(c,M(:,4),[],@mean)];


Andrei Bobrov
Answer by per isakson on 5 Dec 2012
Edited by per isakson on 5 Dec 2012

Given thirty days in every month try this

    daily_val = rand( 30*12, 1 );
    daily_val = reshape( daily_val, 30, [] );
    monthly_val = sum( daily_val, 1 );

here I assume that the first value in daily_val is the first value of a month. This is intended as a start.


per isakson
Answer by Chad Greene on 5 Nov 2014

downsample_ts can do this by

precip_monthlymean = downsample_ts(precip_daily,t_daily); 


Chad Greene

Contact us