удалить диапазон строк массива ячеек при определенном условии, MATLAB - PullRequest
0 голосов
/ 04 октября 2018

У меня очень большой массив ячеек, содержащий множество мер.Как правило, измерения находятся в диапазоне от 3 до 15 метров.Моя проблема в том, что некоторые из этих измерений не имеют этого диапазона, поэтому это недопустимые данные, я хочу удалить этот диапазон данных из моего массива ячеек.

Вот что я попробовал (в резюме):

ind_cond = find(strcmp('Machine',A{:,1}));
A = table2cell(A);

for i = 1:(length(ind_cond)-1);
cond = ismember(A(ind_cond(i):ind_cond(i+1),11),'15');
if cond == 0
   A(ind_cond(i):ind_cond(i+1),11) = [];
    end
end

Итак, сначала я ищу слово «Машина», потому что оно есть во всех заголовках, поэтому я могу получить общее количество измерений.Затем я пытаюсь найти строку '15' (я конвертирую это позже в num) в диапазоне измерений, и если нет '15', я хочу удалить этот диапазон строк из массива.Я получаю следующую ошибку:

«Нулевое назначение может иметь только один индекс без двоеточия»

Большое спасибо

РЕДАКТИРОВАТЬ:

Воткартина того, как выглядят данные (я не знаю, как их загрузить, это файл .csv, извините)

Важным является столбец 11, вот данные, которые меня интересуют.Проблема, например, в том, что некоторые наборы данных (их много, от 0,25 до 17 метров) являются неполными, потому что у них нет значения «15», поэтому я хочу удалить весь набор данных в этом случае.

Моя первая попытка была сделать что-то вроде этого

for i = 1:(length(ind_cond)-1);
  if ind_cond(i+1,1)- ind_cond(i,1) < 30 ;
     A(ind_cond(i):ind_cond(i+1),:) = [];
     end
end

И это работает хорошо, но это не удаляет все конфликтующие данные, так как у меня есть один (1) очень большой набор данных, который неимеют '15', и условие выше не может устранить его.

На рисунке «Что я хочу удалить» приведен пример того, как конфликтуют данные, и я хочу удалить все эти данные. Обзор данных Что я хочу удалить

1 Ответ

0 голосов
/ 04 октября 2018

Если вы хотите удалить ячейки без строки '15', вы можете сделать следующее:

A = [{'TEST'} {'Machine'} ; ...
{'test1'} {'3'}; ...
{'test2'} {'7'}; ...
{'test3'} {'16'}; ...
{'test4'} {'15'} ; ...
{'test5'} {'1'}; ...
{'test6'} {'8'}];
machine_cell = A(:,2);
% keep only cells that where there in no '15'
new_A = A(contains(machine_cell,'15'),:);

Новый массив ячеек будет:

>> new_A =

  1×2 cell array

{'test4'}    {'15'}

Напротив, оставьте все ячейки, у которых нет '15', затем просто отрицайте contains:

new_A = A(~contains(machine_cell,'15'),:);
>> new_A =

  6×2 cell array

    {'TEST' }    {'Machine'}
    {'test1'}    {'3'      }
    {'test2'}    {'7'      }
    {'test3'}    {'16'     }
    {'test5'}    {'1'      }
    {'test6'}    {'8'      }
...