How can I find pairs of rows with the same values in certain columns?

3 views (last 30 days)
For a (very) huge data set in form of a 350000x11 matrix I need to find pairs of rows
  • with identical values in columns 1,6 and 7 and
  • with a different value in column 10 (dummy variable, either 0 or 1)
and calculate the difference in column 11 for each pair matching the above mentioned conditions. Using a for loop I only managed to compare consecutive rows:
[m,n] = size(X)
for i=1:m-1
if X(i,1) == X(i+1,1) && X(i,6) == X(i+1,6) && X(i,7) == X(i+1,7) && X(i,10) ~= X(i+1,10)
X(i,11)-X(i+1,10)
end
end
Any ideas? Thank you in advance!

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 27 Oct 2014
Edited: Andrei Bobrov on 29 Oct 2014
k = diff(X);
i0 = find(all(k(:,[1,6,7]) == 0,2) & k(:,10) ~= 0);
out = permute(cat(3,X(i0,:),X(i0+1,:)),[3, 2, 1]);
add
difference_in_column_11 = k(i0,11);
  3 Comments
Manuel
Manuel on 27 Oct 2014
Sory I've got another question. Since Matlab is not able to display "out" I tend to leave out that line of code. Do you have another proposal? Especially regarding the calculation of the "difference in column 11 for each pair matching the above mentioned conditions". Thanks, Manuel

Sign in to comment.

More Answers (0)

Categories

Find more on Graphics Performance in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!