MatlabまたはExcelを使用して2つのテーブルから行の交差を取得する方法は?

私はグーグルではありましたが、これまでのところ、結果は私の必要性に完全に一致しませんでした。誰かが同じ質問の回答を投稿した場合、誰かが私に知らせることができますか?どうもありがとうございました。

私は、2つのテーブルから2つのExcelファイルを1つだけ数値値が含まれていて、他の両方のtxtと数値が含まれています。たとえば、file1.xlsxにはstudentidの列ベクトルのみがあり、

1  
3    
5     
11     
20 ....    

また、file2.xlsxには次のようなワークシートが含まれています。

 studentID   Name     score    email        
 1           Cassie   60       [email protected]     
 2           John     100      [email protected]      
 3           Marry    80       ...    
 4           Bob      70       ...     
 5           Kevin    99       ....     

studentIDがfile1.xlsxにある学生の行を探したいので、最終的に得られるテーブルは次のようになります。

studentID  Name    score  email       
1          Cassie  60      [email protected]     
3          Marry   80      [email protected]    
5          Kevin   99     [email protected]    
...    

私はSQLやPerlのようなスクリプト言語を持っていません。私はmatlabで知っている、インターセット関数が、しかし、それは数値行列でのみ動作します。私のfile2.xlsxには、数値とtxtの両方の値が入っています。私はそれらを分けたくありません。そして、テーブルには数値とtxtの両方の部分があるので、Excelのファイルをセル配列に読み込む方法はわかりません。 Matlabを使ってこの問題を解決する方法を知っている人がいれば、Excelはうまくいきます。最終結果のテーブルを取得するだけです。

どうもありがとうございました。

1

2 答え

Excelでは、file2.xlsxに式を使用して新しい列を作成します。

=MATCH(A2,[\path\file1.xlsx]Sheet1!$A$2:$A$20,0)

ここで、$ A $ 2:$ A $ 20は、file1.xlsxの学生IDを持つ範囲です。最後の 0 は完全一致を意味します。この数式をすべての行に分配します。この関数は、IDがfile1にない場合は、行数でN/Aを返します。この列を使用して、これらの行をフィルタリングすることができます。

簡単なフィルタリングのために、ISERROR関数を追加することができます:

=NOT(ISERROR(MATCH(A2,[\path\file1.xlsx]Sheet1!$A$2:$A$20,0)))

次に、TRUEは既存のIDに対応し、FALSEはIDの不足に対応します。

file1.xlsxに追加の列があり、file2のデータと組み合わせたい場合は、INDEX関数を使用できます。

=INDEX([\path\file1.xlsx]Sheet1!B$2:B$20,MATCH($A2,[\path\file1.xlsx]Sheet1!$A$2:$A$20,0),1)

MATCH/INDEXの組み合わせでは、VLOOKUPの場合のように、検索列のデータをソートする必要はありません。


MATLABでは、ISMEMBER関数を使用できます。

両方のファイルをMATLABにインポートし、セル配列file1とfile2を持っているとします。次に、あなたが行うことができます:

[~,~,file1] = xlsread('file1.xlsx');
[~,~,file2] = xlsread('file2.xlsx');
[idx2, idx1] = ismember(file2(:,1), file1(:,1));
filtered2 = file2(idx2,:);

file2.xlsx内の行を見つけて、同じ順序で並べ替えるには:

idx1(idx1==0) = [];
filtered1 = file1(idx1,:);

file1.xlsxの行の順序を保持したい場合は、ismemberステートメントのfile2とfile1を切り替えてください。

2
追加された
申し訳ありませんが、私は何とかあなたのコメントを逃した。私はあなたがまだMATLABでファイルを読むことができると信じていますが、ファイルを見ずに正確な答えを出すのは難しいです。あなたの質問がまだあなたのために実際であれば、あなたのサンプルファイルをどこかにアップロードしてここにリンクを投稿できますか?
追加された 著者 yuk,
こんにちは、大変ありがとうございました。私は最初にmatlabメソッドを試しました。しかし、file2.xlsxには空のセルがあるので、それらのコマンドを入力すると、xlsreadメソッドは固定長ではなく不平を言います。提案はありますか?また、空のセルを手動で入力するよりも何かを試していきます。ありがとう
追加された 著者 Cassie,

Excels VLOOKUP(英語)/ SVERWEIS(ドイツ語)機能を試すことができます。 Excel文書の次のレイアウトを考慮してください。

1.xlsx
 |  A|  B|  C|  D|
1|  1|   |   |   |
2|  3|   |   |   |
3|  5|   |   |   |
4| 11|   |   |   |
5| 20|   |   |   |


2.xlsx
 |  A|  B|   C|      D|
1|  1|  C|  60| [email protected]|
2|  2|  J| 100| [email protected]|
3|  3|  M|  80| [email protected]|
4|  4|  B|  70|       |
5|  5|  K|  99|       |

1.xlsxに2.xlsxの学生の詳細を入力するには、次の式を1.xlsxに割り当てます。

B1: =VLOOKUP($A1;[]!$A$1:$D$5;2;TRUE)
B2: =VLOOKUP($A2;[]!$A$1:$D$5;2;TRUE)
...
C1: =VLOOKUP($A1;[]!$A$1:$D$5;3;TRUE)
C2: =VLOOKUP($A2;[]!$A$1:$D$5;3;TRUE)
...
D1: =VLOOKUP($A1;[]!$A$1:$D$5;4;TRUE)
D2: =VLOOKUP($A2;[]!$A$1:$D$5;4;TRUE)
...

VLOOKUPは、2番目のパラメータで指定されたシートの最初のパラメータ($ A1、..)のオカレンスを検索し、2番目のパラメータで指定された行列のn番目の値(3番目のパラメータ)をコピーします。第4ブール値paramは、完全一致が必要かどうかを指定します。

you need to replace '< PATH_TO_2.xlsx >' and '< NAME_OF_SHEET_IN_2.xlsx >' with correct values, '[]' and '!' must stay in place

further explanation: http://www.techonthenet.com/excel/formulas/vlookup.php

がんばろう :)

1
追加された