How to replace elements if it is true

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.

Antworten (1)

Jan
Jan am 18 Apr. 2017
Bearbeitet: Jan am 24 Apr. 2017

0 Stimmen

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 Kommentare

Kanakaiah Jakkula
Kanakaiah Jakkula am 22 Apr. 2017
It give an error:
??? Subscript indices must either be real positive integers or logicals.
Image Analyst
Image Analyst am 22 Apr. 2017
Use isempty() to make sure LocA is not empty.
Jan
Jan am 24 Apr. 2017
@Kanakaiah Jakkula: See [EDITED]

Melden Sie sich an, um zu kommentieren.

Kategorien

Tags

Gefragt:

am 18 Apr. 2017

Bearbeitet:

Jan
am 24 Apr. 2017

Community Treasure Hunt

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

Start Hunting!

Translated by