Filter löschen
Filter löschen

Find specific date/time from a series of datenums

22 Ansichten (letzte 30 Tage)
Louise Wilson
Louise Wilson am 16 Sep. 2019
Bearbeitet: Louise Wilson am 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 Kommentare
Nicolas B.
Nicolas B. am 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 am 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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Steven Lord
Steven Lord am 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 Kommentar
Louise Wilson
Louise Wilson am 17 Sep. 2019
Bearbeitet: Louise Wilson am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Ted Shultz
Ted Shultz am 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, :);

Kategorien

Mehr zu Dates and Time finden Sie in Help Center und File Exchange

Produkte


Version

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by