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

 Réponse acceptée

Guillaume
Guillaume le 8 Nov 2016

0 votes

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 commentaires

Mekala balaji
Mekala balaji le 8 Nov 2016
It give error: ??? Undefined function or method 'table' for input arguments of type 'cell'.
Guillaume
Guillaume le 9 Nov 2016
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.
Guillaume
Guillaume le 11 Nov 2016
[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' []

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by