Check for value in multiple columns and delete rows with that value
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Star Strider
2017-11-27
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 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!