Удалить строку таблицы, когда число из одного столбца находится внутри строки в другом столбце - PullRequest
1 голос
/ 06 ноября 2019

Ниже представлена ​​таблица, в которой третий столбец представляет собой массив ячеек с двойными числами, а последний столбец представляет собой массив ячеек с символами. Я хотел бы удалить строку № 248, исходя из условия, что «Субъект немного переместился в начале 2-й минуты» содержит цифру 2, которая равна значению третьего столбца этой строки. Я реализовал это следующим образом:

commentMinNum = regexp(cellfun(@string, T2.comments(:)),'\d','Match');
commentMinNumInd = find(~cellfun(@isempty, commentMinNum));
extractMinNum = cell2mat(cellfun(@double, commentMinNum, 'UniformOutput', false));
deleteCond = T2.minNum(commentMinNumInd) == extractMinNum;
T2(commentMinNumInd(deleteCond), :) = [];

Эта реализация кажется сложной и многословной для такой простой задачи. Я хотел бы знать, есть ли более простой подход. Я что-то пропускаю или Матлаб хочет, чтобы я страдал? :)

enter image description here

1 Ответ

2 голосов
/ 06 ноября 2019

Заданная таблица t :

name = {'TLVPivotal07';'TLVPivotal07';'TLVPivotal07'};
regularityStatus = [1;1;0];
minNum = [1;2;3];
comments = {'Subject moved a bit at the beginning of the 2nd minute';
'Subject moved a bit at the beginning of the 2nd minute';
'Subject moved a bit at the beginning of the 2nd minute'};

t = table(name,regularityStatus,minNum,comments);

Возможное решение, использующее регулярное выражение для проверки, находится ли значение во втором столбце в строке комментариев:

indx = (1:numel(t.comments)).';
tInd = ~cellfun(@isempty,arrayfun(@(x,y) regexp(t.comments(y), [num2str(x) '[a-z]{2} minute'],'match','once'),t.minNum,indx));
t(tInd,:) = []

удалит нужные строки.

...