Change non-numerics into NaN & split cell array by delimiter
조회 수: 3 (최근 30일)
이전 댓글 표시
I have a 3000x1 cell array of depth in centimeters with both letters and numbers
EX:
A = {organic layer, 5~10, 15~20, 30~50, not specified}
I want to change all of the non-numeric bins into NaN and then split this array into both the lower and upper bound of depth so that
Lower Bound = {NaN, 5, 15, 30, NaN}; Upper Bound = {NaN, 10, 20, 50, NaN};
I tried to use numind = cellfun(@isnumeric, A) to find the numeric indices and then from that find all of the indices that ARENT numeric, to replace with NaN, but it simply says that all of the bins are not numeric because of the '~' between the integers.
Is there any way that I could accomplish this?
Thanks, Melissa
댓글 수: 6
Guillaume
2014년 12월 4일
There are some cells in your cell array that contain numbers instead of strings. To see which ones:
find(cellfun(@(x) isnumeric(x), Depthcm))
채택된 답변
Guillaume
2014년 12월 4일
Once you've fixed the numeric values in you cell array, with for example:
Depthcm(cellfun(@(x) isnumeric(x), Depthcm)) = {''};
You can get your arrays with:
splitdepth = regexp(Depthcm, '~', 'split');
splitdepth(cellfun(@(c) numel(c) == 1, splitdepth)) = {{'Nan' 'NaN'}};
bounds = str2double(vertcat(splitdepth{:}));
추가 답변 (1개)
Star Strider
2014년 12월 4일
I’m not certain how your cell is organised, but assuming the structure here, this code will at least get you the numbers:
A = {'organic layer', '5~10', '15~20', '30~50', 'not specified'};
B = strrep(A, '~', ' ');
C = str2num(char((B(2:4)')));
producing:
C =
5 10
15 20
30 50
I worked with other options but couldn’t get them to produce this any more efficiently.
댓글 수: 3
Star Strider
2014년 12월 4일
When I use exactly that code and ‘A’, it works without error (or I’d not have posted it).
What’s different about my ‘A’ and your cell array?
(I’m using R2014b, so there could be version differences.)
참고 항목
카테고리
Help Center 및 File Exchange에서 Data Type Identification에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!