MATLAB Answers

Extracting specific rows with different content from a large table array

9 ビュー (過去 30 日間)
Carl Schneegaß
Carl Schneegaß 2020 年 9 月 28 日
回答済み: Steven Lord 2020 年 9 月 28 日
I have several tables (a x 3; double, double, string).
The first double contains Matlab Dates, the 2nd contains numbers between 0 and 1.
I would like to extract the data of specific days, e.g. SpecificDay-30:SpecificDay+10
For example, I would like to extract all 41 rows where MatDate is (SpecificDay-30:SpecificDay+10) when SpecificDay = 736958 (which is datenum(2017,09,20)).
This is how one of the tables looks like:
Thank you so much in advance!

  0 件のコメント

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

回答 (4 件)

madhan ravi
madhan ravi 2020 年 9 月 28 日
ix = find(TaBle.MatDate == 736958);
Wanted = TaBle{(ix-30):(ix+10), :}

  0 件のコメント

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


Turlough Hughes
Turlough Hughes 2020 年 9 月 28 日
Tnew = T(T.MatDate>=SpecificDay-30 & T.MatDate<=SpecificDay+10,:);

  0 件のコメント

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


Steven Lord
Steven Lord 2020 年 9 月 28 日
Consider storing your data in a timetable, converting your MatDate variable into a datetime array and using table2timetable (or manually creating a timetable from the variables.) If you do this you can use timerange to extract rows in a certain interval.
rng(999, 'twister') % Arbitrarily chosen to make the problem a little more interesting
% Create some sample data
N = datetime('now');
dt = N + minutes(randi([-180 180], 10, 1));
x = (1:10).';
% Build a timetable
T = timetable(dt, x)
% Make the timerange to use in indexing into T
thirtyToSixty = timerange(N+minutes(30), N+minutes(60))
% Index into T
T(thirtyToSixty, :)

  0 件のコメント

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


Sudheer Bhimireddy
Sudheer Bhimireddy 2020 年 9 月 28 日
Convert the datenum to datetime, and then you can use the MATLAB function isbetween() to get all the indices that satisty your criteria.

  0 件のコメント

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

Community Treasure Hunt

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

Start Hunting!

Translated by