Add row from one table to another if column combination do not exist in the last mentioned table.
5 views (last 30 days)
Show older comments
Hello,
Apologies in advancem for the long message but I have tried to be as concise as possible.
I have two different tables, one called bigTable and one called myTable. Each table consists of a total of 27 columns.
What I want to do is I want to see if a certain combination of column 1, 2 and 3 in myTable already exists in bigTable , if not then add the row to bigTable.
Below is a picture where the incircled rows is the rows that i want to add, since row 1-18 already exists in bigTable.
I tried to do like below:
for(i=1:height(myTable))
if(ismember(myTable(i,[1 2 3]),bigTable(:,[1 2 3]))); %
;
else
bigTable = [bigTable; myTable(i,:)];
end
Everything works fine until row 22 which is not getting added to bigTable. I am pretty sure it is because the three different columns already exists seperately in row 19,20 and 21.
My question is how I can change my code so that it checks if the combination of column 1, 2 and 3 already exists in some of the rows in bigTable or not?
0 Comments
Answers (1)
Ishaan Mehta
on 26 Jun 2022
Hello
I understand that you wish to move rows myTable to bigTable only if the combination of the first 3 columns of myTable'r does not already exist in any row in bigTable.
It can be easily done by nested loops and creating an array with values of first 3 columns of any given row in myTable, which can by compared to all the rows existing in bigTable during any given iteration.
Here is a code snippet for the same:
bigTable = table();
myTable = table();
% entering dummy data in myTable
myTable.col1(1) = randi([1 3]); % random value from 1,2,3
myTable.col2(1) = randi([1 3]);
myTable.col3(1) = randi([1 3]);
myTable.col4(1) = randi([1 8]);
myTable.col5(1) = randi([1 8]);
myTable.col6(1) = randi([1 8]);
for i = 1:1000
newRow = [randi([1 3]) randi([1 3]) randi([1 3]) randi([1 8]) randi([1 8]) randi([1 8])];
myTable{i,:} = newRow;
end
myTable
% adding rows to bigTable only for unique combination for first 3 columns
for i = 1:height(myTable)
rowFound = 0;
first3cols= myTable{i, 1:3}; % values of first 3 columns of current myTable row
for j = 1:height(bigTable)
if all(first3cols == bigTable{j, 1:3}) % if values match for all 3 columns
rowFound = 1;
break;
end
end
if ~rowFound
bigTable = [bigTable; myTable(i,:)];
end
end
bigTable
Hope it helps
Ishaan Mehta
0 Comments
See Also
Categories
Find more on Particle & Nuclear Physics in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!