group by in Matlab to find the value that resulted minimum similar to SQL -


i have dataset having columns a, b, c , d want group dataset a,b , find c such d minimum each group can "group by" using 'grpstats" :

grpstats(m,[m(:,1) m(:,2) ],{'min'});

i don't know how find value of m(:,3) resulted min in d

in sql suppose use nested queries , use primary keys. how can solve in matlab?

here example:

>> m =[4,1,7,0.3; 2,1,8,0.4; 2,1,9,0.2; 4,2,1,0.2; 2,2,2,0.6; 4,2,3,0.1; 4,3,5,0.8; 5,3,6,0.2; 4,3,4,0.5;]  >> grpstats(m,[m(:,1) m(:,2)],'min') ans =  2.0000    1.0000    8.0000    0.2000 2.0000    2.0000    2.0000    0.6000 4.0000    1.0000    7.0000    0.3000 4.0000    2.0000    1.0000    0.1000 4.0000    3.0000    4.0000    0.5000 5.0000    3.0000    6.0000    0.2000 

but m(1,3) , m(4,3) wrong. correct answer looking is:

2.0000    1.0000    9.0000    0.2000 2.0000    2.0000    2.0000    0.6000 4.0000    1.0000    7.0000    0.3000 4.0000    2.0000    3.0000    0.1000 4.0000    3.0000    4.0000    0.5000 5.0000    3.0000    6.0000    0.2000 

to conclude, don't want minimum of third column; want it's values corresponding minimum in 4th column

grpstats won't this, , matlab doesn't make easy might hope.

sometimes brute force best, if doesn't feel great matlab style:

[b,m,n]=unique(m(:,1:2),'rows'); =1:numel(m)     idx=find(n==i);     [~,subidx] = min(m(idx,4));     a(i,:) = m(idx(subidx),3:4); end  >> [b,a] ans =         2            1            9          0.2         2            2            2          0.6         4            1            7          0.3         4            2            3          0.1         4            3            4          0.5         5            3            6          0.2 

Comments

Popular posts from this blog

html - How to style widget with post count different than without post count -

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

javascript - storing input from prompt in array and displaying the array -