Extracting specific rows with different content from a large table array

1 回表示 (過去 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!

回答 (4 件)

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

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

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, :)

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.

カテゴリ

Help Center および File ExchangeTimetables についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by