如何通过使用Matlab或Excel从两个表格的交叉点?

我一直在使用谷歌search,但迄今为止的结果发现不完全符合我的需要。 如果有人针对同一个问题发布了答案,有人可以告诉我吗? 非常感谢你。

我有两个Excel文件中的表格,其中一个只包含数值,另一个包含txt和数值。 例如,file1.xlsx只有一个studentid列向量,它们是整数,例如,

1 3 5 11 20 .... 

而file2.xlsx包含一个工作表:

  studentID Name score email 1 Cassie 60 test@gmail.com 2 John 100 john@gmail.com 3 Marry 80 ... 4 Bob 70 ... 5 Kevin 99 .... 

我想查找其studentID在file1.xlsx中的学生行,所以最终的结果表应该如下所示:

 studentID Name score email 1 Cassie 60 test@gmail.com... 3 Marry 80 Marry@gmail.com 5 Kevin 99 kevin@gmail.com ... 

我没有脚本语言,如SQL或Perl。 我知道在matlab中,有一个interset函数,但是,它只能用数值matrix工作。 对于我的file2.xlsx,它包含数值和txt值。 我不想分开他们。 而且我不知道如何读取excel文件到cellarray中,因为表格既有数字部分也有txt部分。 如果有人知道如何解决这个问题,无论是使用Matlab或Excel是好的,我只需要得到最终的结果表。

非常感谢你,

在Excel中,使用以下公式在file2.xlsx中创build一个新列:

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

其中$ A $ 2:$ A $ 20是file1.xlsx中带有学生ID的范围。 最后0意味着完全匹配。 将此公式分配给所有行。 如果ID不在file1中,则该函数在行中返回#N / A。 您可以使用此列过滤出这些行。

为了便于过滤,您可以添加ISERRORfunction:

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

然后,TRUE将对应于现有的ID,并且FALSE到缺less的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组合不需要对search列中的数据进行sorting,例如VLOOKUP。


在MATLAB中,您可以使用ISMEMBER函数。

假设您已经将两个文件导入到MATLAB,并且您有单元arraysfile1和file2。 那你可以这样做:

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

要查找file2.xlsx中file1.xlsx中的行,并按照相同的顺序对它们进行sorting:

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

如果要保留file1.xlsx中的行顺序,只需在ismember语句中切换file2和file1即可。

您可以尝试Excels VLOOKUP(英文)/ SVERWEIS(德文)function。 考虑到您的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| a@b.de| 2| 2| J| 100| b@c.de| 3| 3| M| 80| c@d.de| 4| 4| B| 70| | 5| 5| K| 99| | 

使用2.xlsx中的学生详细信息填充1.xlsx将以下公式分配给1.xlsx:

 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在第二个参数指定的工作表中search第一个参数($ A1,..)的出现次数,并在第二个参数中指定的matrix中复制第n个值(第三个参数)。 4th布尔参数指定是否需要完全匹配。

您需要用正确的值,'[]'和'!'replace'<PATH_TO_2.xlsx>'和'<NAME_OF_SHEET_IN_2.xlsx>' 必须留在原地

进一步的解释: http : //www.techonthenet.com/excel/formulas/vlookup.php

祝你好运 :)