Data extraction of dates

I have a column of data with rainfall on each day, from 2004 to 2016. I want to be able to extract the rainfall data for each day and store that data into columns of months for each year. I have created a loop that finds the end day of all months from 2004 to 2016, but am having trouble now extracting the information.
[SL: formatted question as text not code]

2 Comments

Mohammad Sami
Mohammad Sami on 24 Mar 2020
Edited: Mohammad Sami on 24 Mar 2020
Create a vector to store the index of the days (rows) you want to extract. Then you can simply subset.
I need some sort of loop because theres more than 4000 data points

Sign in to comment.

Answers (1)

Walter Roberson
Walter Roberson on 24 Mar 2020
Edited: Walter Roberson on 24 Mar 2020
Dv = Dates(:) ;
Output = accumarray([day(Dv), month(Dv), year(Dv)-2003], Rainfall(:), [31 12 13], [], nan);
The result will be a 3d array with one pane for each year, with rows being day numbers, columns being month numbers. Unused entries such as shorter months or missing data will be set to nan

6 Comments

I am receiving an error message that says
Error using accumarray
First input SUBS and third input SZ must satisfy
ALL(MAX(SUBS)<=SZ).
Can you please explain what each input of accumarray does?
Thanks
current code is :
clc;clear all;close all
filename='Data Q2 (2).xlsx';
[num,txt,raw]=xlsread(filename);
dandenongdate=txt(2:end,1);
dandenongnum=num(:,1);
Dv = dandenongdate ;
Output = accumarray([day(Dv), month(Dv), year(Dv)-2003], dandenongnum, [31 12 13], [], nan);
Use readtable so that you get datetime objects not date vectors.
It tells me Error using day (line 37)
You cannot subscript a table using linear indexing (one
subscript) or multidimensional indexing (three or more
subscripts). Use a row subscript and a variable subscript.
What does it mean by row and variable subscript?
Thank you
clc;clear all;close all
filename='Data Q2 (2).xlsx';
data=(readtable(filename))
dandenongnum=data(:,2);
dandenongdate=data(:,1);
Dv=dandenongdate;
Output = accumarray([day(Dv), month(Dv), year(Dv)-2003], dandenongnum, [31 12 13], [], nan);
clc;clear all;close all
filename='Data Q2 (2).xlsx';
data=(readtable(filename))
dandenongnum=data{:,2};
dandenongdate=data{:,1};
Dv=dandenongdate;
Output = accumarray([day(Dv), month(Dv), year(Dv)-2003], dandenongnum, [31 12 13], [], nan);

Sign in to comment.

Asked:

on 24 Mar 2020

Commented:

on 25 Mar 2020

Community Treasure Hunt

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

Start Hunting!