extracting one data point per day from a time series

1 view (last 30 days)
I have a time series of predicted water level data (cm), either 3 or 4 predicted values per day (for an entire year).
For each day I would like to extract only the highest predicted value along with the date/time stamp.
How do I extract the highest value for each day - and write that out to a new matrix?
An example of the data is attached in the extract_data.txt file.
Following that, I would like to bar chart the data per month.
I can do this manually - however, is there a way to select the data based on the date/time stamp and bar plot the data for that month ?
Is there a way to loop the plotting ?
Thank you, Jenny
  1 Comment
dpb
dpb on 20 Mar 2014
You can't efficiently select a max value from the file directly; you don't have sufficient information at a time.
Read the file in its entirety, convert the timestamps to Matlab datenums (use datenum) and then group by the unique values found therein. Then for each of those groups find the max and its location and select those rows.

Sign in to comment.

Accepted Answer

per isakson
per isakson on 20 Mar 2014
This produces a bar chart
fid = fopen( 'cssm.txt', 'r' );
cac = textscan( fid, '%s%f', 'Delimiter' , '\t' );
fclose( fid );
vec = datevec( cac{1}, 'dd/mm/yyyy HH:MM:SS' );
day_of_year = @(vec) datenum(vec(:,1:3))-datenum(vec(1,1),1,0);
sl = accumarray( day_of_year(vec), cac{2}, [max(day_of_year(vec)),1], @max );
bar( sl )
xlabel( 'day of year' )
where cssm.txt is a copy of your file

More Answers (0)

Categories

Find more on Dates and Time in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!