0

我在 MATLAB 表 A 和表 B 中有 2 个表,每个表都有不同的维度(不同的行数和列数)。表 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在第四列中2018-11-10 12:40:00:145,我想从表 A 中删除所有数据条目/行,在这种情况下,DateTime 列值为表 A 的范围为2018-11-10 12:30:00:1732018-11-10 12:40:00:145,例如)。这意味着基本上我将从表 A 中删除上述范围内的数据。

为了解决这个问题,我首先想到的是使用inner join(),但是,从 Mathworks 社区指南中可以明显看出,它innerjoin()仅与我指定 Key 的确切列值匹配,但在这种情况下,我将查看表 B 的 2 列中的 DateTime 值范围,因此这可能不是最佳方法。为此目的使用 afor loop也可以,但是会非常复杂和冗余,因为表中的大数据需要大量的计算时间。在这方面的任何帮助将不胜感激。

4

1 回答 1

1

我在 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, :) = [];
于 2018-11-29T22:09:52.783 回答