Effacer les filtres
Effacer les filtres

Splitting cell array of both strings and numbers by a delimiter

2 vues (au cours des 30 derniers jours)
Melissa
Melissa le 11 Déc 2014
Commenté : Guillaume le 11 Déc 2014
Hello,
I have a cell array that consists of both strings and numbers. I need to split into two different columns by the delimiter '~' However, I am not able to use regexp, as the cell array must all be strings. And I can't use num2str or str2num because half are strings and half are numbers, and it creates an error message. I am attaching my .mat file so you may get an idea of what I'm working with.
Please let me know what I can do to split this cell array into two different columns by the delimiter '~' For the elements that are NaN, I would like both columns to say NaN
Thank you for your help,
Melissa
  3 commentaires
Melissa
Melissa le 11 Déc 2014
I found the way to change the numbers into strings! I had to use cellfun but with the uniform output changed to false :
Depthcm = cellfun(@num2str, Depthcm,'UniformOutput','false');
Now I have a cell array of strings, and I can now use regexp. However, I am a bit confused about how I can split them into two separate columns while also including the NaN's. Because if I split it with this line:
Y = regexp(Depthcm,'\~','split');
I get a 1x2 cell within each of the Y elements, except for the NaN indices.
Therefore, I would like two columns like this:
A = [0 0 0 NaN 2 NaN NaN]; B = [20 20 5 NaN 4 NaN NaN];
Guillaume
Guillaume le 11 Déc 2014
If you've changed the NaN into a single string, then you're back to your previous question.
Or you can do what I've done in my answer below.
In any case, when processing data, it is better to always generate that data in a consistent way. In your case, that means always have string consisting of two numbers surrounding ~, even if these numbers are NaN. That is, you would have been better off writing 'NaN~NaN' in your cell array instead of 'NaN' or NaN.
Side note: there's no need to escape ~ in the regular expression. I'm surprised matlab accepts it.

Connectez-vous pour commenter.

Réponse acceptée

Guillaume
Guillaume le 11 Déc 2014
The simplest thing would be to convert these NaNs into strings of 'NaN~NaN' and then use the same algorithm as in my previous answer to convert the cell array:
Depthcm(cellfun(@(x) isnumeric(x) && isnan(x), Depthcm)) = {'NaN~NaN'};
splitdepth = regexp(Depthcm, '~', 'split');
bounds = str2double(vertcat(splitdepth{:}));
  1 commentaire
Melissa
Melissa le 11 Déc 2014
Yes! that is exactly what I was looking for!
Much easier and logical than my previous comment :)
Thank you so much

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by