Table comparison [String - cell compare]

41 visualizzazioni (ultimi 30 giorni)
Khaled Genidy
Khaled Genidy il 11 Nov 2021
Modificato: Seth Furman il 15 Nov 2021
I have 2 tables that contain the same headers of the first row.
  • My goal is to see if the cells contains the same values
  • if true - contaminate cells to present the values
From the two tables below.
  • I need to have my comparison for example : a cell in X would be 1,5 for Y XW
Part of my code is:
for i=1 : size(Table1)
if strcmpi(Table1.X(i), Table2.X(i) ==1)
X12= cellstr(strcat(....., ',' , ..........)
I am just confused.
I am currently getting - conversion to double from cell is not possible.
Table1 Table 2 expected result
X Y X Y X Y
1 XW 5 XW 1, 5 XW
2 XR 4 XR 2, 4 XR
3 XR 3 XR 3 XR
4 XW 2 XZ
5 XX 1 XZ
  1 Commento
the cyclist
the cyclist il 11 Nov 2021
It would be much easier to help if you uploaded the two tables in a MAT file. You can use the paperclip icon in the INSERT section of the toolbar.

Accedi per commentare.

Risposte (2)

Seth Furman
Seth Furman il 12 Nov 2021
Modificato: Seth Furman il 15 Nov 2021
Take a look at the table functions innerjoin and outerjoin:
t1 = table((1:5)', categorical(["XW";"XR";"XR";"XW";"XX"]), 'VariableNames', ["X","Y"])
t1 = 5×2 table
X Y _ __ 1 XW 2 XR 3 XR 4 XW 5 XX
t2 = table((5:-1:1)', categorical(["XW";"XR";"XR";"XZ";"XZ"]), 'VariableNames', ["X","Y"])
t2 = 5×2 table
X Y _ __ 5 XW 4 XR 3 XR 2 XZ 1 XZ
tJoined = innerjoin(t1, t2, "Keys", "Y")
tJoined = 6×3 table
X_t1 Y X_t2 ____ __ ____ 2 XR 4 2 XR 3 3 XR 4 3 XR 3 1 XW 5 4 XW 5
tJoined = mergevars(tJoined, ["X_t1", "X_t2"], "NewVariableName", "X")
tJoined = 6×2 table
X Y ______ __ 2 4 XR 2 3 XR 3 4 XR 3 3 XR 1 5 XW 4 5 XW
[groupNums, Y] = findgroups(tJoined.Y)
groupNums = 6×1
1 1 1 1 2 2
Y = 2×1 categorical array
XR XW
X = splitapply(@(x) {unique(x)'}, tJoined.X, groupNums)
X = 2×1 cell array
{[2 3 4]} {[1 4 5]}
table(X, Y)
ans = 2×2 table
X Y _________ __ {[2 3 4]} XR {[1 4 5]} XW

Image Analyst
Image Analyst il 12 Nov 2021
Try this:
% Create saple data:
x1 = [1;2;3;4;5]
y1 = {'XW'; 'XR';'XR';'XW';'XX'}
x2 = [5;4;3;2;1]
y2 = {'XW'; 'XR';'XR';'XZ';'XZ'}
table1 = table(x1, y1, 'VariableNames',{'X', 'Y'})
table2 = table(x2, y2, 'VariableNames',{'X', 'Y'})
% Create output table.
table3 = table({0}, {'?'}, 'VariableNames',{'X', 'Y'});
count = 1;
for row = 1 : size(table1, 1)
thisString = table1.Y{row};
fprintf('Searching for %s.\n', thisString)
if isequal(table1.Y{row}, table2.Y{row})
% Columns y match.
table3.X{count} = unique([table1.X(row), table2.X(row)], 'stable');
table3.Y{count} = thisString;
count = count + 1;
end
end
table3
You'll see
table3 =
3×2 table
X Y
_______ ______
{[1 5]} {'XW'}
{[2 4]} {'XR'}
{[ 3]} {'XR'}

Categorie

Scopri di più su Characters and Strings in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by