how can remove words and split in cellarray in matlab

for example x={'100614,Peter Beadle,131542'}; i want x= [100614,131542] my dataset have 408934 record like 'x'

 採用された回答

Paolo
Paolo 2018 年 6 月 10 日
編集済み: Paolo 2018 年 6 月 10 日

1 投票

For input:
x = {'100614,Peter Beadle,131542'}
You can use regexp to match numerical entries in your cell. The expression below matches numbers from 0-9 for 6 times since the numbers in your cell have exactly 6 digits.
x={'100614,Peter Beadle,131542'};
[tokens,matches] = regexp(x,'[0-9]{6}','match');
x = str2double(tokens{:});
For input:
x = {'100614','Peter Beadle','131542'}
Use the following:
x = {'100614','Peter Beadle','131542'};
x = str2double(x);
x(isnan(x)) = [];

10 件のコメント

Ava persiangulf
Ava persiangulf 2018 年 6 月 10 日
>> x = str2double(tokens{:});
  • Error using str2doubleToo many input arguments.
  • not answered.....why?
Paolo
Paolo 2018 年 6 月 10 日
編集済み: Paolo 2018 年 6 月 10 日
Is your x definitely
x={'100614,Peter Beadle,131542'}
and not
x={'100614','Peter Beadle','131542'}
?
Stephen23
Stephen23 2018 年 6 月 10 日
編集済み: Stephen23 2018 年 6 月 10 日
str2double only accepts one input argument, so this
str2double(tokens{:})
will not work if tokens contains multiple cells. str2double's one input argument may be cell array, so perhaps you meant to use that:
tokens = vertcat(tokens{:});
str2double(tokens)
Paolo
Paolo 2018 年 6 月 10 日
str2double(tokens{:})
returns the correct array.
str2double(tokens)
returns NaN.
At least on my machine with 2017b. I suspect that her input is not a single cell but rather a cell array.
Ava persiangulf
Ava persiangulf 2018 年 6 月 10 日
yes, tokens contain multiple cells
Paolo
Paolo 2018 年 6 月 10 日
If your input x is:
x={'100614','Peter Beadle','131542'}
Then use:
x = {'100614','Peter Beadle','131542'};
x = str2double(x);
x(isnan(x)) = [];
If you confirm that's the format of your input, I'll edit my answer.
Ava persiangulf
Ava persiangulf 2018 年 6 月 10 日
thanks for answering,.... What should I do now?
Paolo
Paolo 2018 年 6 月 10 日
@Ava,
I have modified my answer. It now contains a solution for both inputs. If the problem is solved you can accept my answer. Consider perhaps adding the other input to your question.
Ava persiangulf
Ava persiangulf 2018 年 6 月 10 日
編集済み: Stephen23 2018 年 6 月 10 日
that's answered for me but make change data in my dataset, for example, x=[8213430049,100573,100614] change to x=[8.213430049100573] .... but your answer was very helpful and thank you very much
Paolo
Paolo 2018 年 6 月 10 日
You are welcome. In that case, try using:
x = [8213430049,100573,100614];
x = num2str(x);
x = strsplit(x,' ');
x = str2double(strcat(x{1}(1),'.',x{1}(2:end),x{2}));
x = 8.213430049100573

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeData Type Conversion についてさらに検索

質問済み:

2018 年 6 月 10 日

編集済み:

2018 年 6 月 10 日

Community Treasure Hunt

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

Start Hunting!

Translated by