extract data based on specific condition
조회 수: 3 (최근 30일)
이전 댓글 표시
Nazrin Afiq Abdul Rahman
2021년 1월 5일
댓글: Nazrin Afiq Abdul Rahman
2021년 1월 7일
Hello,
Can someone help me. i am newbie in looping and conditioning things in programming. I had some problem in getting the data based on specific criteria or condition. For example i have 2 set of data which i call set1 and set2 which each data consists of multiple row and 4 column. For full set of data, the total number of rows for both 2 set are different and the total number is not cosistent between both but have the same total number of column which is 4. For example, i show some of my 2 set data.
set1:
58202.0003472222 10 12 -0.00419000000000000
58202.0003472222 12 14 0.00259000000000000
58202.0003472222 14 20 0.00437000000000000
58202.0003472222 20 21 -0.00745000000000000
58202.0003472222 21 24 -0.00101000000000000
58202.0003472222 24 25 -0.000761000000000000
58202.0003472222 25 26 0.00243000000000000
58202.0003472222 26 29 -0.00121000000000000
58202.0003472222 29 32 0.00169000000000000
58202.0006944445 10 12 -0.00427000000000000
set2:
58202.0003472222 10 12 -0.00136000000000000
58202.0003472222 12 14 0.000256000000000000
58202.0003472222 14 20 -0.000641000000000000
58202.0003472222 20 21 0.00136000000000000
58202.0003472222 21 24 -0.000655000000000000
58202.0003472222 24 25 -8.90000000000000e-05
58202.0003472222 25 29 7.69000000000000e-05
58202.0003472222 29 31 1.86000000000000e-06
58202.0003472222 31 32 -0.00101000000000000
what i want to do is i wanna take the forth (4) column for both set of data and set it as variable example a for set1 and b for set2 with a condition that the column 1, column 2, and column 3 is the same or equal.
댓글 수: 2
Sriram Tadavarty
2021년 1월 5일
It would be good to indicate how the desired output should be for the provided sets, set 1 and set 2.
채택된 답변
Matt Gaidica
2021년 1월 5일
Here's an illustrative way to do it, for both the case where row order matters and does not:
set1 = [58202.0003472222,10,12,-0.00419000000000000;58202.0003472222,12,14,0.00259000000000000;58202.0003472222,14,20,0.00437000000000000;58202.0003472222,20,21,-0.00745000000000000;58202.0003472222,21,24,-0.00101000000000000;58202.0003472222,24,25,-0.000761000000000000;58202.0003472222,25,26,0.00243000000000000;58202.0003472222,26,29,-0.00121000000000000;58202.0003472222,29,32,0.00169000000000000;58202.0006944445,10,12,-0.00427000000000000];
set2 = [58202.0003472222,10,10,-0.00136000000000000;58202.0003472222,12,12,0.000256000000000000;58202.0003472222,14,14,-0.000641000000000000;58202.0003472222,20,20,0.00136000000000000;58202.0003472222,21,21,-0.000655000000000000;58202.0003472222,24,24,-8.90000000000000e-05;58202.0003472222,25,25,7.69000000000000e-05;58202.0003472222,29,29,1.86000000000000e-06;58202.0003472222,31,31,-0.00101000000000000;58202.0006944445,10,10,-0.00166000000000000;58202.0006944445,12,12,0.000414000000000000;58202.0006944445,14,14,4.67000000000000e-05;58202.0006944445,20,20,0.000736000000000000];
%% row order matters
a = [];
b = [];
% can't go past minimum row size
for ii = 1:min([size(set1,1),size(set2,1)])
if set1(ii,1) == set2(ii,1) && set1(ii,2) == set2(ii,2) && set1(ii,3) == set2(ii,3)
a = [a;set1(ii,4)];
b = [b;set2(ii,4)];
end
end
%% row order doesn't matter, compare all
a = [];
b = [];
% loop through all entires
for ii = 1:size(set1,1)
for jj = 1:size(set2,1)
if set1(ii,1) == set2(jj,1) && set1(ii,2) == set2(jj,2) && set1(ii,3) == set2(jj,3)
a = [a;set1(ii,4)];
b = [b;set2(jj,4)];
end
end
end
Your sample data isn't the best to try this out on, because I don't see a case that fits your condition for either method.
댓글 수: 3
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!