How to exclude rows on the basis of specific entries?

38 visualizzazioni (ultimi 30 giorni)
I have 260 rows and 16 columns with entries belong to {1,2,3,4}, I want to exclude those rows in which first four entries of each row is 4 , or in general how can I exclude rows on the basis of entries?

Risposta accettata

Guillaume
Guillaume il 6 Feb 2018
It's not clear what you mean by repeat.
If you mean you want to delete rows whose first four columns contain more than one 4:
A = [4 4 1 2; 4 4 4 4;1 4 2 4;4 2 3 2]
todelete = sum(A(:, 1:4) == 4, 2) > 1;
A(todelete, :) = []
If you mean you want to delete rows whose first four columns contain two more more consecutive 4, then it's a lot more complicated. One possible way
A = [4 4 1 2; 4 4 4 4;1 4 2 4;4 2 3 2]
todelete = cellfun(@(row) ~isempty(strfind(row, [1 1])), num2cell(A(:, 1:4) == 4, 2));
A(todelete, :) = []
  9 Commenti
Ammy
Ammy il 9 Feb 2018
Sorry , its work. Thank you for the help.
Ammy
Ammy il 9 Feb 2018
A =
1 2 3 4 0 1 2 3
0 1 2 3 1 2 3 4
1 2 3 4 1 1 1 1
1 2 4 5 3 2 1 2
How can I separate those rows having first four entries are in the order 1 2 3 4 e.g in the above example I want to separate first and third row .

Accedi per commentare.

Più risposte (1)

Jos (10584)
Jos (10584) il 6 Feb 2018
Here is a flexible example:
% data
X = [4 4] ; % rows starting with this should be discarded
A = [1 4 1 4 ; 4 4 2 2 ; 4 2 4 0 ; 4 4 4 4 ; 2 4 4 2] ; % rows 2 and 4 should be discarded
% engine
tf = ismember(A(:,1:numel(X)), X, 'rows')
A(tf) = [] ; % remove

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by