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.

Respuestas (1)

Jan
Jan el 18 de Abr. de 2017
Editada: Jan el 24 de Abr. de 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 comentarios

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

Iniciar sesión para comentar.

Categorías

Etiquetas

Preguntada:

el 18 de Abr. de 2017

Editada:

Jan
el 24 de Abr. de 2017

Community Treasure Hunt

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

Start Hunting!

Translated by