How to replace elements if it is true

1 view (last 30 days)
Kanakaiah Jakkula
Kanakaiah Jakkula on 18 Apr 2017
Edited: Jan on 24 Apr 2017
Hi,
I have below cell array matrices:
A={'DF','3';'FR','4';'RR','2';'RT','4'};
B={'AB','1';'BC','3';'CD','5';'DF','7';'FR','9';'RT','8';'TA','1';'AR','3';'TY','4'};
if any of the row in B is member in A, the replace the corresponding second column element by seconf column element of A. I use the below code,
close all
clear all
clc
A={'DF','3';'FR','4';'RR','2';'RT','4'};
B={'AB','1';'BC','3';'CD','5';'DF','7';'FR','9';'RT','8';'TA','1';'AR','3';'TY','4'};
indx=ismember(B(:,1),A(:,1));
B(indx,2)=A(indx,2);
but it give the error:
??? Index exceeds matrix dimensions.
Error in ==> ScoreCompare at 7 B(indx,2)=A(indx,2);
My desired output should be:
AB 1
BC 3
CD 5
DF 3
FR 4
RT 4
TA 1
AR 3
TY 4
Many thanks in advance.

Answers (1)

Jan
Jan on 18 Apr 2017
Edited: Jan on 24 Apr 2017
In B(indx,2)=A(indx,2) the index "indx" would concern both arrays. You need both outputs of ismember instead:
[LiB, LocA] = ismember(B(:,1), A(:,1));
B(LiB, 2) = A(LocA, 2); % [EDITED] Does not work for missing B
[EDITED]:
B(LiB, 2) = A(LocA(LiB), 2);
  3 Comments
Image Analyst
Image Analyst on 22 Apr 2017
Use isempty() to make sure LocA is not empty.
Jan
Jan on 24 Apr 2017
@Kanakaiah Jakkula: See [EDITED]

Sign in to comment.

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!