![](/img/trans.png)
[英]How to delete columns from a table variable in MATLAB based on (relative) number of missing data points without using a loop
[英]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:173
到2018-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.