Как удалить данные таблицы на основе сравнения между различными столбцами в другой таблице в MATLAB? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть 2 таблицы в MATLAB-таблице A и таблице B, каждая из которых имеет разные размеры (разные номера строк и столбцов).Первый столбец таблицы A имеет дату и время в формате, подобном 2018-11-01 12:00:00 (формат данных DateTime).

Теперь в таблице B третий и четвертый столбцы также состоят из даты и времени в формате, подобном 2018-11-01 01:11:12:173000.Чего я хотел бы добиться, так это удалить все строки (которые являются экземплярами данных) из таблицы A, в случае чего Datetime для таблицы A попадает в диапазон между датой и временем в таблице B. (Точнее,предположим, что в таблице B есть запись DateTime в третьем столбце для первой строки / первого экземпляра данных как 2018-11-10 12:30:00:173 и в четвертом столбце как 2018-11-10 12:40:00:145, я хотел бы удалить все записи / строки данных из таблицы A в случаенапример, значение столбца DateTime для таблицы A находится в диапазоне от 2018-11-10 12:30:00:173 до 2018-11-10 12:40:00:145).Это означает, что в основном я хотел бы удалить данные в вышеуказанном диапазоне из таблицы A.

Чтобы подойти к этому, первое, что мне приходит в голову, это использовать inner join(), но это видно изРуководство сообщества Mathworks о том, что innerjoin() соответствует только точному значению столбца, в котором я указываю Ключ, но в этом случае я бы посмотрел на диапазон значений DateTime в 2 столбцах таблицы B, поэтому, возможно, это не лучшийподход.Использование for loop для этой цели также может сработать, но будет довольно сложным и избыточным с огромным вычислительным временем для больших данных в таблицах.Любая помощь в этом отношении будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 ноября 2018

Я получил несколько хороших ответов на вопрос на странице Сообщества Mathworks, ответы на которые можно найти по адресу https://uk.mathworks.com/matlabcentral/answers/432509-how-to-remove-table-data-based-on-comparison-between-different-columns-in-another-table-in-matlab?s_tid=prof_contriblnk

Я ценю ответ Гийома (ответ на указанной ссылке на странице сообщества Mathworks)выше), и я помещаю это здесь для будущей помощи кому-либо: -

%inputs: TableA with a column named date, TableB with a column named datestart and dateend
%replace by actual table and variable names.
datetocheck = repmat(TableA.date, 1, height(TableB));  %replicate in as many columns as there are rows in B
datestart = repmat(TableB.datestart', height(TableA), 1); %tranpose and replicate in as many rows as in A
dateend = repmat(TableB.dateend', height(TableA), 1);
toremove = any(datetocheck >= datestart & datetocheck <= dateend, 2); 
TableA(toremove, :) = [];
...