# How to replace elements if it is true

1 view (last 30 days)
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

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);
Jan on 24 Apr 2017
@Kanakaiah Jakkula: See [EDITED]

### Categories

Find more on Matrices and Arrays 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!