2015-12-09 3 views
0

У меня есть следующие входыприсоединиться столбцы массивов в MATLAB

  • набор данных 1 с десятками тысяч строк и 5 столбцов массива
  • набора данных 2 с десятками тысяч строк и 3 массива столбцов

Я хочу добавить/слить (добавить) 3-й столбец набора данных 1 в новый 4-й столбец массива набора данных 2 для элементов, для которых идентификатор один и тот же (то же значение в столбце 1 набора данных 1 и столбца 1 набор данных 2). Математически вы можете написать это следующим образом:

dataset2(i,4)=dataset1(find(dataset1(:,1)==c(i,1)),3); 

но как положить его в MATLAB?

Ни один из методов, упомянутых в справочной системе MATLAB или в другом месте в Интернете, не работает. Я уже пробовал merge, join, ismember, vectors, но я не могу решить проблему.

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

+0

или это действительно невозможно в Matlab для объединения разных столбцов разных массивов разных размеров на основе перекрывающегося ID? –

ответ

1

Я считаю, что это то, что вы хотите

%We keep the index of all the matching rows 
%NOTICE: I changed c(i,1) to dataset2(:,1) 
%matches_in_col_1 = find(dataset1(:,1)==dataset2(:,1)); 

%EDIT: HOW TO COMPARE MORE THAN 2 COLUMNS 
%if you want to find matches in 4 datasets just use this 
matches_in_col_1 = find(dataset1(:,1)==dataset2(:,1)==dataset3(:,1)==dataset4(:,1)); 

%now copy the values from those rows into the corresponding row 
%of datsaset2 
dataset2(matches_in_col_1,4) = dataset1(matches_in_col_1,3); 

Я не уверен на 100%. Почему стоит i? вы пытались реализовать цикл? Мое решение также предполагает, что c должен был быть dataset2

+0

Да, c действительно набор данных 2. Но с помощью этого метода, как вы определяете, из каких массивов вы берете столбец 1, у меня есть и другие файлы (набор данных 3,4, ...) в скрипте, но они не необходимо изменить. Итак, я хочу, чтобы положить для элементов, для которых идентификатор один и тот же (для элементов, для которых столбец 1 для обоих наборов данных равен), поместить элементы 3-го столбца набора данных 1 в новый столбец набор данных2; и матрицы не совпадают, по методу, который вы предлагаете, я получаю, что размер матрицы «ошибки должен быть согласован», и это не так. –

+0

или это просто невозможно в Matlab? –

+0

@WouterJohns Я сделал редактирование кода для соответствия 4 наборам данных. вы просто расширяете выражение сравнения. Все наборы данных ** должны иметь одинаковое количество строк, но могут иметь различное количество столбцов. Когда вы говорите 'datasetX (:, 1)' вы говорите все строки, и для сравнения все наборы данных должны иметь одинаковое количество строк – andrew

Смежные вопросы