首页 > 解决方案 > Matlab.- 从每个元素都是时间表的单元格数组中删除重复项

问题描述

我有一个大小为 360*1 的单元格数组,其中每个元素由一个 330*3 的时间表组成。每个时间表上每列的名称是“小时”、“量”和“价格”。对于每个时间表,我想删除重复的成交量观察(当然,我也想删除其对应的价格和小时)。我该怎么做?不幸的是,当我有一个向量时,“唯一”函数就很好,但不适用于元胞数组。

提前致谢!

这里我提供一个时间表的示例代码,

Date = datetime({'2015-12-18 08:03:05';'2015-12-18 10:03:17';'2015-12-18 12:03:13';'2015-12-18 12:04:13';'2015-12-18 12:05:13'});
Hour = [1;1;1;1;1];
Volume = [152;152;300;400;500];
Price = [13.4;6.5;7.3;10;11];
TT = timetable(Date,Hour,Volume,Price)

目标是摆脱两个 152 卷观察,这适用于单元阵列中包含的所有时间表。

标签: matlabduplicatescell-arraytimetable

解决方案


这几乎只是一个关于如何从表中删除元素的问题。这是您的MVE

dts = [datetime('yesterday')
        datetime('today')
        datetime('now')
        datetime('tomorrow')];

T = timetable(dts,rand(length(dts),1),rand(length(dts),1),'VariableNames',{'price','volume'});
T.volume(4) = T.volume(2);

请注意,第 4 个条目volume与第二个条目相同。此外,我假设这volume是一个向量(听起来很合理)......

% find unique entries of the vector T.volume
[~, idx] = unique(T.volume);
% delete other rows / better: keep unique rows of the table
T = T(idx,:);

如果您现在处理包含许多表格的单元格,只需循环遍历它即可。假设您的 360x1 单元被称为C

for i = 1:length(C)
    % get table from cell
    T = C{i};
    % do the stuff above
    %...
    % assign cropped table back to the cell
    C{i} = T;
end

推荐阅读