Check for value in multiple columns and delete rows with that value
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Karena Weduwen
el 27 de Nov. de 2017
Respondida: Star Strider
el 27 de Nov. de 2017
I have a variable with six columns (A-F) and n rows. Whenever column C is -1 i want to look up the value in column A of the same row and delete all rows with that value.
0 comentarios
Respuesta aceptada
Star Strider
el 27 de Nov. de 2017
If ‘M’ is your matrix, this will work:
idx = any(bsxfun(@eq, M(:,1), (M(M(:,3)==-1,1))'),2);
Mout = M(~idx,:);
The ‘M(M(:,3)==-1,1)’ checks column 3 for -1 values, and returns the corresponding values in column 1. The bsxfun call searches for elements of column 1 that are equal to those values, and returns a matrix of column vectors of logical indices for each equality. The any call will be 1 if any of the column vectors are 1 in all rows, creating a single column logical vector from the matrix of logical vectors. Then the ‘Mout’ assignment returns all the rows that are not 1, producing the desired output.
Also, you can avoid retyping the ‘idx’ assignment with your actual array name by creating an anonymous function from it, so that if you call your array ‘A’:
idxfcn = @(M) ~any(bsxfun(@eq, M(:,1), (M(M(:,3)==-1,1))'),2);
idx = idxfcn(A);
Result = A(~idx,:);
producing the desired result.
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Matrices and Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!