0

列 a、b、c、および d を持つデータセットがあります。データセットを a、b でグループ化し、各グループで d が最小になるように c を見つけ、「grpstats」を次のように使用して「グループ化」できます。

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

d の最小値となった M(:,3) の値を見つける方法がわかりません

SQLでは、そのためにネストされたクエリを使用し、主キーを使用すると思います。Matlabでどのように解決できますか?

次に例を示します。

>> 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

しかし、M(1,3) と M(4,3) は間違っています。私が探している正しい答えは次のとおりです。

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

結論として、3 番目の列の最小値は必要ありません。しかし、4列目の最小値に対応する値が必要です

4

2 に答える 2

0

私は信じている

temp = grpstats(M(:, [1 2 4 3]),[M(:,1) M(:,2) ],{'min'});
result = temp(:, [1 2 4 3]);

あなたが必要とすることをします。そうでない場合は、コメントで説明してください。解決できます...

ドキュメントを正しく理解していれば、

temp = grpstats(M(:, [1 2 4 3]), [1 2], {'min'});
result = temp(:, [1 2 4 3]);

動作するはずです(列の完全な内容ではなく列番号を指定します)...現在テストできないため、保証できません。

于 2013-09-04T04:44:46.540 に答える