Я предлагаю вам два решения: одно для Excel и одно для Matlab. Выберите тот, который вы предпочитаете (если вам не нужно обрабатывать данные с помощью Matlab, я рекомендую вам выбрать первое решение и придерживаться Excel).
EXCEL
Придерживаясь Excel, чтобы решить эту проблему, я бы пошел на ручной подход. В этом случае единственной функцией, которую вам придется использовать, является VLOOKUP . Давайте посмотрим, как действовать шаг за шагом:
- Создать новый файл Excel.
- Откройте первый файл (файл со столбцами
v1
, v2
и commID
) и скопируйте его содержимое на первый лист нового файла.
- Откройте второй файл (файл с
Index
и Name
) и скопируйте его содержимое во второй лист нового файла.
- Вернуться к первому листу.
- Вставьте строку
v1
в столбец D
строку 1
(для репликации заголовка). Вставьте следующую формулу в столбец D
строка 2
: =VLOOKUP(A2;B!A:B;2;FALSE)
и скопируйте ее вниз.
- Вставьте строку
v2
в столбец E
строку 1
(для репликации заголовка). Вставьте следующую формулу в столбец E
строка 2
: =VLOOKUP(B2;B!A:B;2;FALSE)
и скопируйте ее вниз.
- Выберите целые столбцы
D
и E
(переназначенные v1
и v2
) и скопируйте их содержимое (CTRL+C
). Теперь выберите целые столбцы A
и B
(старые v1
и v2
) и вставьте ранее скопированное содержимое на место (используйте специальную функцию Paste Values
из контекстного меню).
- Удалить последние два столбца листа. Удалить второй и третий листы. Сохраните ваш файл.
* MATLAB 1057 *
Поскольку ваша проблема очень близка к операции объединения SQL
, я бы остановился на таблицах (полученных путем анализа файлов Excel с использованием функции readtable ) и встроенной функции join функция:
% Read the content of both Excel files...
F1 = readtable('File1.xlsx');
F2 = readtable('File2.xlsx');
% Join the table F1 with F2 on v1 = Index...
T1 = join(F1,F2,'LeftKeys',{'v1'},'RightKeys',{'Index'});
% Join the table F1 with F2 on v2 = Index...
T2 = join(F1,F2,'LeftKeys',{'v2'},'RightKeys',{'Index'});
% Create the final table combining T1.Name (as v1), T2 (as v2) and F1.commID (as commID)...
T = table(T1.Name,T2.Name,F1.commID,'VariableNames',{'v1' 'v2' 'commID'});
% Save the result into a new file...
writetable(T,'File3.xlsx');
Предположим, что содержимое первого файла (File1.xlsx
):
v1 v2 commID
__ __ ______
2 1 1
2 1 1
3 4 1
3 5 2
1 4 1
и содержимое второго файла (File2.xlsx
):
Index Name
_____ _____
1 'AAA'
2 'BBB'
3 'CCC'
4 'DDD'
5 'EEE'
Тогда конечный результат будет:
v1 v2 commID
_____ _____ ______
'BBB' 'AAA' 1
'BBB' 'AAA' 1
'CCC' 'DDD' 1
'CCC' 'EEE' 2
'AAA' 'DDD' 1