Find specific date/time from a series of datenums

25 vues (au cours des 30 derniers jours)
Louise Wilson
Louise Wilson le 16 Sep 2019
Modifié(e) : Louise Wilson le 17 Sep 2019
I have a 7184x72001 double matrix where the first column is a list of serial datenumbers.
I am happy to keep the format this way, but I need to be able to select a specific date/time from this list so that I can extract the data from certain days/times that I am interested in.
So, is it either possible to:
-search from a list of datenums to find a specific date/time that I provide?
-add a column of str data to a matrix of double?
or-convert all of the datenums to date and time?
I have tried the second approach so far:
D=csvread('Tiritiri5280_PSD_1sHammingWindow_50%Overlap_output.csv'); %load in data
t=D(:,1); %extract time column
formatOut='yymmddHHMMSS';
times=datestr(t, formatOut); %convert t column datenums to date and time
rows=(1:length(times)).'; %number of dates and times we have
D_new=[rows D]; %add new column to D
D_new(:,1)=timeslist(:,2); %add times in different format to D
-this works but I now get the datenum in a different format which is also not readable. How do I keep the date time in yymmddhhmmss in a double matrix? Is this possible?
Here,column 1 is the new dates/times that I tried to insert in readable form, and column 2 is serial datenum.
  2 commentaires
Nicolas B.
Nicolas B. le 17 Sep 2019
Hi,
in a matrix, you have the problem that you can only have 1 data type for all your data. Maybe a cell array could help you?
Louise Wilson
Louise Wilson le 17 Sep 2019
Thank you Nicolas, I realised this shortly after asking the question. Woops-from Steven's answer, I think I will try to go with a timetable and see if that is more useful.

Connectez-vous pour commenter.

Réponse acceptée

Steven Lord
Steven Lord le 17 Sep 2019
If you're going to be doing a lot of processing of this data based on the times, consider turning your column of date numbers into a datetime array and using that datetime array to convert your data matrix into a timetable. Once you do this you could extract data from the timetable based on the times for each row using a timerange as shown in the "Subscript on Time Range" section on this documentation page. You could also resample or aggregate your timetable data using a certain time basis, as shown here.
  1 commentaire
Louise Wilson
Louise Wilson le 17 Sep 2019
Modifié(e) : Louise Wilson le 17 Sep 2019
Thank you Steven. I would follow these steps to do this?:
t = datetime(X,'ConvertFrom','datenum')
TT = array2timetable(X,'RowTimes',rowTimes)
Would this work, given the values populated in my cells? They are decibel values with five decimal places.
I'm not sure why I am using datenum to be honest... I started my Matlab endeavors using code from a past grad student at the lab where I am working (to answer the same questions but with different data) and all of her code uses those, for some reason I am yet to figure out. My raw date/time data comes in the format yyddmmHHMMSS. Can you convert this format directly to datetime? Also, using a timetable, am I able to use the rowtimes? I'd like to plot them as the x-axis values in a plot.

Connectez-vous pour commenter.

Plus de réponses (1)

Ted Shultz
Ted Shultz le 17 Sep 2019
It looks like the start of your approach is reasonable. Once you make a “times” array, there is no need to add it back to the “D” matrix. You can use that as your index.
For example:
indexOfInterest = (times > t_one) && (times < t_two);
someData =d(indexOfInterest, :);

Catégories

En savoir plus sur Dates and Time dans Help Center et File Exchange

Produits


Version

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by