2012-01-20 4 views
7

SQL의 GROUP BY가 MATLAB에서 수행하는 작업을 수행하려고합니다. 예를 들어,MATLAB의 GROUP BY

M = [
1,5];
2, 5;
3, 5;
1, 6;
2,6;
1,7]

SQL : 2

의해 결과 MAX (C1), M FROM C2 (C1, C2)를 선택 GROUP =
3, 5;
2,6;
1, 7]

어떻게하면 Matlab에서이 작업을 수행 할 수 있습니까? 통계 도구 상자에서

+1

옥타브에 accumarray가 있다고 가정합니다. 그렇지 않으면'M (:, 1)'의 'unique'값을 반복하여 결과를 얻지 않아야합니다. –

답변

4

grpstats는이 작업을 수행 할 수 있습니다

>> [grpstats(M(:,1), M(:,2), {'max'}) unique(M(:,2))] 

ans = 

    3  5 
    2  6 
    1  7 
+0

또한 데이터가 데이터 세트 배열 (stats 도구 상자에서도 있음)에 있으면' grpstats'는 더 좋고 자동적입니다. 여기를 참조하십시오 : http://www.mathworks.com/help/toolbox/stats/dataset.grpstats.html –

+1

사실,이 기능이없는 Octave를 사용하고 있습니다. 플러그인으로 설치할 수 있는지 알고 있습니까? 대체 솔루션을 알고 있습니까? – Gjorgji

+0

http://www.orient-lodge.com/node/3732의 예제 코드를 사용할 수 있습니다. – itamarb

2

나는 간단한 해결책이 거기에있다 생각합니다. 여기 내가 matlab에 테스트하고 일 것입니다 :

>> M = [ 
1, 5; 
2, 5; 
3, 5; 
1, 6; 
2, 6; 
1,7 ]; 

>> grpstats(M,M(:,2),{'max'}) 

ans = 

    3  5 
    2  6 
    1  7 
3

당신은 (첫 번째 열이 잘 1 n까지 내장되어있는 경우 나), 당신이 할 수있는 순서를 얻기 위해 몇 가지 전처리를하고 괜찮다면 그것은이 좋아 :

14 
12 
13 

을 또는 귀하의 경우 :

accumarray([1 2 3 1]',[11 12 13 14]',[],@max) 

이 줄 것이다

accumarray(M(:,1),M(:,2),[],@max) 

주문에 유의하십시오. 예를 들어, 두 번째 숫자는 M(:,1) == 2에 해당합니다.