繁体   English   中英

如何基于MATLAB中另一个表中不同列之间的比较来删除表数据?

[英]How to remove table data based on comparison between different columns in another table in MATLAB?

我在MATLAB中有2个表-表A和表B,每个表的维数不同(行和列的数量不同)。 表A的第一列的日期和时间格式如2018-11-01 12:00:00 (DateTime数据格式)。

现在,在表B中,第三列和第四列也由日期和时间组成,格式如2018-11-01 01:11:12:173000 我想实现的是从表A中删除所有行(即数据实例),在这种情况下,表A的日期时间在表B中的日期和时间之间。 ,假设表B在第一行/第一个数据实例的第三列中有一个DateTime条目,即2018-11-10 12:30:00:173 ,在第四列中有一个DateTime条目,即2018-11-10 12:40:00:145 ,我想从表A中删除所有数据条目/行,以防表A的DateTime列值介于2018-11-10 12:30:00:1732018-11-10 12:40:00:145例如2018-11-10 12:40:00:145 )。 这意味着基本上我将从表A中删除上述范围内的数据。

为此,我想到的第一件事是使用inner join() ,但是,从Mathworks社区指南中可以明显看出, innerjoin()仅与我指定Key为的确切列值匹配,但是在这种情况下,我将在表B的2列中查看一系列DateTime值,因此也许这不是最佳方法。 为此,使用for loop可能会很好,但对于表中的大数据需要大量的计算时间,这将非常复杂且多余。 在这方面的任何帮助将不胜感激。

我在Mathworks社区页面上收到了对该问题的一些很好的答案,可以在以下网址找到答案: https://uk.mathworks.com/matlabcentral/answers/432509-how-to-remove-table-data-based-on-比较-不同柱合另一表型与Matlab之间-?s_tid = prof_contriblnk

我感谢Guillaume的回答(在上面提到的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, :) = [];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM