2012-03-03 6 views
1

MatlabでSQLスタイルの結合を行いたいと思います。私は戻って変換し、再びデータセットを削除、参加をして、データセットを作成することにより、(統計ツールボックス)にそれを行うことができます:MATLAB:SQLスタイルの結合操作

A1 = [10 10 20 20 30 30 50 50]'; 
B1 = (10:10:70)'; 
B2 = (1:7)'; 

dsA = dataset({A1, 'Key'}); 
dsB = dataset({B1, 'Key'}, {B2, 'Idx'}); 
dsA = join(dsA, dsB, 'key', 'Key'); 

結果:

Key Idx 
10  1 
10  1 
20  2 
20  2 
30  3 
30  3 
50  5 
50  5 

は私の質問:これを行うための別の方法はあります、データセットを使用せずにforループなし

ありがとうございました!ご例えば

+0

私はmatlabを知っていますが、SQLを知っていますが、あなたは何をしたいのですか?あなたはA1とB1からB2に行きたいですか? sqlの結合は、共有キーを使用して1つのテーブルの要素(ここではベクトル)をルックアップして2つ目の要素とマージする方法です。 – Ali

+0

私がしたいもの: SELECT A1、B2 from A、B WHERE A1 = B1; Amroの提案された解決策は何ですか。 – Janosch

答えて

2

、あなたは単にISMEMBERを使用することができます。

[~,loc] = ismember(A1,B1); 
dsA = [B1(loc) B2(loc)] 

結果:

dsA = 
    10  1 
    10  1 
    20  2 
    20  2 
    30  3 
    30  3 
    50  5 
    50  5 

注:これはA1のすべての要素がB1で発見されていることを前提としています。それが必ずしもそうでない場合は、ISMEMBERの最初の出力を使用してlocのゼロ値をフィルタすることができます。

+0

ありがとう!私はloc引数を知らなかった。 – Janosch

関連する問題