Remove rows based on length of column value
3 views (last 30 days)
I have a matrix , 1531*3 double.
At a first column, numbers represent same particles from 1 to 14. I have 14 particles and each of them has different time points(second column) with intensity value(third column).
I'd like to take only particles which the number of time points is over 2, and make a new matrix. In this example, I need to remove rows of 14th particle and make the new matrix which doesn't have 14th particle, because it has only 2 time points. Should I use 'loop'?
for j = 1:14
if length(find(A(:,1)==j)) > 2
Rik on 3 Jun 2019
Instead of implicit expansion (which can take a lot of memory for bigger arrays), you can use histogram counts:
B=A(~L,:);%keep only IDs with >2 time points
More Answers (1)
Joel Handy on 3 Jun 2019
I think this code will do what you want. It will make a vector with the same number of rows as A, with each element being the number of times that ID shows up in ID column, and then delete all of the rows where the ID count is less than or equal to 2. It takes advantage of implicit expansion to do this.
numTimes = sum(A(:,1)==A(:,1)');
A(numTimes<=2,:) = ;