Hi,
I have input table and reference table:
Input Table:
Mek S
Lahi S
Raju F
Ram S
Krish F
Mek F
Ram S
Balu S
Raju S
Reference:
Mek VAL
Lahi HAT
Raju KJI
Ram GAT
Krish HTY
Balu KTY
1. I want to match names of first column of input table, and extract the corresponding name in column2 of Reference table. I want the below output:
Mek S VAL
Lahi S HAT
Raju F KJI
Ram S GAT
Krish F HTY
Mek F VAL
Ram S GAT
Balu S KTY
Raju S KJI
Many thanks in advance

 Accepted Answer

Have you tried join?
%in the future make it easy to use your example in code by using valid matlab syntax
t1 = table({'Mek', 'Lahi', 'Raju', 'Ram', 'Krish', 'Mek', 'Ram', 'Balu', 'Raju'}.', num2cell('SSFSFFSSS').', 'VariableNames', {'Key', 'Value'})
t2 = table({'Mek' 'Lahi' 'Raju' 'Ram' 'Krish' 'Balu'}.', {'VAL' 'HAT' 'KJI' 'GAT' 'HTY' 'KTY'}.', 'VariableNames', {'Key', 'OtherValue'})
join(t1, t2)

5 Comments

It give error: ??? Undefined function or method 'table' for input arguments of type 'cell'.
Well, that would mean that a) you're using a version so old (<2013b, something you should have said in your question) that you don't have tables and b) you're using the wrong term in your questions since again you don't have tables (and you wrote "I have input table").
So, I actually have no idea what form your input takes, it's obviously not a table. Since you don't have tables you also can't use join.
Assuming your input is a cell array, you can use ismember instead:
c1 = [{'Mek', 'Lahi', 'Raju', 'Ram', 'Krish', 'Mek', 'Ram', 'Balu', 'Raju'}; num2cell('SSFSFFSSS')].'
c2 = {'Mek' 'Lahi' 'Raju' 'Ram' 'Krish' 'Balu'; 'VAL' 'HAT' 'KJI' 'GAT' 'HTY' 'KTY'}.'
[~, matchrow] = ismember(c1(:, 1), c2(:, 1));
c3 = [c1, c2(matchrow, 2)]
Hi, It works, but I have small amendment in my input, and please suggest me how to incorporate this. I have modified my input as below:
Mek S
Lahi S
Raju F
Ram S
Krish F
Mek F
Ram S
Balu S
Raju S
Venk S
Raju S
Chai F
The change in input is some of the names in the first coulmn of the input does not have any match in the reference table, for this kind of case(s) I just want to assign as "Undefined"
The reference table is below:
Mek VAL
Lahi HAT
Raju KJI
Ram GAT
Krish HTY
Balu KTY
My desired output is below:
Mek S VAL
Lahi S HAT
Raju F KJI
Ram S GAT
Krish F HTY
Mek F VAL
Ram S GAT
Balu S KTY
Raju S KJI
Venk S Undefined
Raju S KJI
Chai F Undefined
Many thnaks in advance.
[isfound, matchrow] = ismember(c1(:, 1), c2(:, 1));
c3 = [c1, cell(size(c1, 1), 1)];
c3(isfound, 2) = c2(matchrow(isfound), 2);
c3(~isfound, 2) = {'Undefined'};
Sir,
Thanks But third row is empty as shown below the simulated output (Actual 2nd row missing): c3 =
'Mek' 'VAL' []
'Lahi' 'HAT' []
'Raju' 'KJI' []
'Ram' 'GAT' []
'Krish' 'HTY' []
'Mek' 'VAL' []
'Ram' 'GAT' []
'Balu' 'KTY' []
'Raju' 'KJI' []
'Venk' 'Undefined' []
'Raju' 'KJI' []
'Chai' 'Undefined' []

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!