Hi all,
Lets say I have 4 x 2 cell matrix A:
1 'text one' 'text two'
2 '5' 'text two'
3 'text one' 'text two'
4 '10' 'text two'
I want the result of a 4 x 2 cell matrix A of all doubles, exept for the last column. The 'text one' has to be replaced by 1 (double):
1 1 'text two'
2 5 'text two'
3 1 'text two'
4 10 'text two'
When I use a for-loop and if-statement I get the error that matrix dimensions must agree. Below is my faulty code:
for i = 1:size(A,1)
if A{i,2} == 'text one'
A{i,2} == 1
else
A{i,2} == str2double(A{i,2})
end
end

 Akzeptierte Antwort

Akira Agata
Akira Agata am 8 Mai 2020

1 Stimme

How about the following?
B = replace(A,'text one','1');
B = cellfun(@str2double,B(:,1:end-1),'UniformOutput',false);
A = [B,A(:,end)];

3 Kommentare

Mike Mierlo van
Mike Mierlo van am 8 Mai 2020
Error using replace (line 60)
First argument must be a string array, character vector, or cell array of character vectors.
still no solution
Could you upload your original cell arrya A?
I have assumed as follows and my code works agains it.
A = {...
'text one', 'text two';
'5', 'text two';
'text one', 'text two';
'10', 'text two'};
Mike Mierlo van
Mike Mierlo van am 8 Mai 2020
Now it works. Because I tried some things, my A(:,2) was converted to doubles with NaN's instead of text. Resetting A to the original cell was the solution. thank you!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

madhan ravi
madhan ravi am 7 Mai 2020
Bearbeitet: madhan ravi am 7 Mai 2020

1 Stimme

V = str2double(string(A)); % <2016a
V(isnan(V)) = 1

4 Kommentare

Mike Mierlo van
Mike Mierlo van am 8 Mai 2020
Sorry, this code does not work. In my actual code there are more columns with text. These columns must remain text.
Walter Roberson
Walter Roberson am 8 Mai 2020
Does your actual code also have numeric values somewhere inside A ?
madhan ravi
madhan ravi am 8 Mai 2020
Dude when did you edit your question? For sure you edited it after I answered!
Mike Mierlo van
Mike Mierlo van am 11 Mai 2020
Madhan Ravi. Yes, I editted it after your answer. Your answer worked perfectly on my simplified problem, but I simplified it so far that your solution did not work on my actual table, that consisted of more text columns too.
Walter Roberson. Yes A has more numeric values too. I solved it by converting them to strings for the needed operation.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Characters and Strings finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by