2011-12-18 38 views
1

我一直在使用谷歌搜索,但迄今爲止發現的結果並不完全符合我的需求。如果某人發佈了相同問題的答案,有人可以告訴我嗎?非常感謝你。如何使用Matlab或Excel從兩個表中獲得交點?

我有兩個表中的兩個excel文件,其中一個只包含數值,另一個包含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中,有一個interset函數,但是,它只能用數值矩陣工作。對於我的file2.xlsx,它包含數值和txt值。我不想分開它們。而且我不知道如何將excel文件讀入cellarray,因爲表格既有數字部分,也有txt部分。如果有人知道如何通過使用Matlab或Excel來解決這個問題,那麼我只需要得到最終的結果表。

謝謝你這麼多,

回答

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,而假缺少的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) 

注意匹配/ 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,:); 

要file1.xlsx找到行現有file2.xlsx並以相同的順序對它們進行排序:

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

如果你想保留行的順序file1.xlsx只是在ismember語句中切換file2和file1。

+0

你好,非常感謝你的幫助。我第一次嘗試了matlab方法。但是,因爲file2.xlsx有空單元格,所以當我鍵入這些命令時,xlsread方法會抱怨不固定的長度。你有什麼建議嗎?我還會繼續嘗試,而不是手動填充每個空單元格。謝謝 – Cassie 2011-12-20 00:17:24

+0

對不起,我不知何故錯過了你的評論。我相信你仍然可以用MATLAB讀你的文件,但很難在沒有看到文件的情況下給你確切的答案。如果問題仍然存在,您可以上傳您的示例文件並將鏈接發佈到此處嗎? – yuk 2012-02-01 21:52:25

1

您可以嘗試擅長VLOOKUP(英文)/ SVERWEIS(德國)功能。 考慮到你的Excel文檔的以下佈局:

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

VLOOKUP搜索的出現:

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

與學生的詳細信息,從2.xlsx分配下列公式1.xlsx填充1.xlsx第一個參數($ A1,..)放在由第二個參數指定的工作表中,並將第二個參數中指定的第n個值(第三個參數)複製到第二個參數中指定的矩陣中。 4th布爾參數指定是否需要完全匹配。

您需要用正確的值替換'< PATH_TO_2.xlsx>'和'< NAME_OF_SHEET_IN_2.xlsx>','[]'和'!'必須留在原地

進一步解釋:http://www.techonthenet.com/excel/formulas/vlookup.php

好運:)