Matlab.- Стереть дубликаты из массива ячеек, где каждый элемент является расписанием - PullRequest
1 голос
/ 10 апреля 2020

У меня есть массив ячеек размером 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 объемных наблюдений, и это для всех расписаний, содержащихся в массиве ячеек.

1 Ответ

1 голос
/ 10 апреля 2020

Это в значительной степени просто вопрос о том, как удалять элементы из таблицы. Вот ваше 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);

Обратите внимание, что четвертая запись в 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,:);

Если вы теперь справляетесь с ячейкой из многих таблиц, просто l oop над ней. Предполагая, что ваша ячейка 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
...