Как получить пересечение строк из двух таблиц с помощью Matlab или Excel? - PullRequest
1 голос
/ 19 декабря 2011

Я гуглял, но пока что результаты не полностью соответствуют моим потребностям.Если кто-то опубликовал ответ на тот же вопрос, кто-нибудь может дать мне знать?Большое спасибо.

У меня есть две таблицы из двух файлов Excel, одна из которых содержит только числовые значения, а другая содержит как txt, так и числовые значения.Например, file1.xlsx имеет только вектор-столбец studentid, представляющий собой целое число, например,

1  
3    
5     
11     
20 ....    

И файл2.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       ....     

Я хотел бычтобы найти ряды студентов, учащийся которых находится в файле 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, но она работает только с числовой матрицей.Для моего file2.xlsx он содержит как числовые, так и текстовые значения.Я не хочу их отделять.И я не знаю, как прочитать файл Excel в подвале, так как таблица имеет как числовую, так и текстовую части.Если есть кто-то, кто знает, как решить эту проблему, используя Matlab или Excel, то я в порядке, мне просто нужно получить окончательную таблицу результатов.

Большое спасибо,

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

В Excel вы создаете новый столбец в файле file.xlsx с формулой:

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

, где $ A $ 2: $ A $ 20 - это диапазон с идентификаторами студентов в file1.xlsx.Последний 0 означает точное совпадение.Распределите эту формулу по всем строкам.Функция возвращает # N / A в строках, если ID отсутствует в file1.Вы можете отфильтровать эти строки, используя этот столбец.

Для упрощения фильтрации вы можете добавить функцию ISERROR:

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

Тогда ИСТИНА будет соответствовать существующим идентификаторам, а ЛОЖЬ - отсутствующим идентификаторам.

Если у вас есть дополнительный столбец в 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и файл2.Затем вы можете сделать:

[~,~,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 просто переключите file2 и file1 в операторе ismember.

1 голос
/ 19 декабря 2011

Вы можете попробовать функцию 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| 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|       |

для заполнения 1.xlsx данными учащихся из 2.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для появления первого параметра ($ A1, ..) в листе, заданном вторым параметром, и копирует n-е значение (3-й параметр) в матрицу, указанную во 2-м параметре.4-й логический параметр указывает, требуется ли точное совпадение.

вам необходимо заменить '' и '' на правильные значения, '[]' и '!'должен остаться на месте

дальнейшие объяснения: http://www.techonthenet.com/excel/formulas/vlookup.php

удачи:)

...