MATLAB Answers


How to convert daily data to monthly?

Asked by Mohammad on 5 Dec 2012
Latest activity Commented on by Chad Greene
on 31 Aug 2016

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.


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?

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.

Log in to comment.

4 Answers

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)];


Log in to comment.

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.


Thanks. But please provide answer through matlab function.

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..

Log in to comment.

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.


Log in to comment.

Answer by Chad Greene
on 5 Nov 2014

downsample_ts can do this by

precip_monthlymean = downsample_ts(precip_daily,t_daily); 


Hi Chad I tried to use this equation but i couldn't i have a daily data and want to have monthly data

My mistake--

precip_monthlymean = downsample_ts(precip_daily,t_daily,'monthly','mean'); 

Log in to comment.

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

MATLAB Academy

New to MATLAB?

Learn MATLAB today!