Find specific date/time from a series of datenums

18 ビュー (過去 30 日間)
Louise Wilson
Louise Wilson 2019 年 9 月 16 日
編集済み: Louise Wilson 2019 年 9 月 17 日
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 件のコメント
Nicolas B.
Nicolas B. 2019 年 9 月 17 日
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 2019 年 9 月 17 日
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.

サインインしてコメントする。

採用された回答

Steven Lord
Steven Lord 2019 年 9 月 17 日
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 件のコメント
Louise Wilson
Louise Wilson 2019 年 9 月 17 日
編集済み: Louise Wilson 2019 年 9 月 17 日
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.

サインインしてコメントする。

その他の回答 (1 件)

Ted Shultz
Ted Shultz 2019 年 9 月 17 日
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, :);

カテゴリ

Help Center および File ExchangeDates and Time についてさらに検索

製品


リリース

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by