how to separate strings from a datatable?
8 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Jonathan Bijman
il 11 Giu 2019
Commentato: Walter Roberson
il 12 Giu 2019
Hello everyone
I'm trying to separate strings from a datatable, of one specific column that contains this for instance:
2019-04-22 Clean A8
and I want to separate date from the strings.
I used this commands:
time=Clean(:,1);
str=string(time);
tiempo=strsplit(str);
But when I apply the last one appears this error:
First input must be either a character vector or a string scalar.
Which I don´t get it, because there are string in there? Aren´t they?
Do I have to work with datatable or cells?
Please help
1 Commento
Peter Perkins
il 12 Giu 2019
I would think the more fundamental question is how you got into this situation to begin with. Are you reading a file? If so can you use detectimportoptions and then readtable to read the data in correctly?
Risposta accettata
Walter Roberson
il 12 Giu 2019
tiempo = arrayfun(@strsplit, str, 'uniform', 0);
8 Commenti
dpb
il 12 Giu 2019
"I get a cell with 1 x 3 strings. But how can I extract only the date from there? "
Look at the content of the cell array...as you asked to split on delimiters and your input array consists of three substrings, (surprise) strplit returned each substring in each row of a three-column cell array.
Hence, the first column contains the date, the second two the subsequent string data fields.
tiempo{:,1}
contains the time string.
Più risposte (1)
dpb
il 12 Giu 2019
As the error message says, strsplit only operates on the strings class or char arrays--it can't handle either cell strings (the reason for which I do not understand) or the result of a table operation that returns a table...
>> Clean={'2019-04-22 Clean A8'}; % sample data
>> Clean=cell2table(Clean) % convert to table (if that is what mean with datatable; we're guessing)
Clean =
table
Clean
_____________________
'2019-04-22 Clean A8'
>> Clean(:,1) % address the variable with numeric subscripting--returns another table
ans =
table
Clean
_____________________
'2019-04-22 Clean A8'
>> strsplit(Clean(:,1)) % and strsplit can't deal with that...as you already found out
Error using strsplit (line 80)
First input must be either a character vector or a string scalar.
>> Clean{:,1} % dereference with curlies {} to get content instead of table--
ans =
1×1 cell array
{'2019-04-22 Clean A8'}
>> strsplit(Clean{:,1}) % but, as error says it can't handle cellstr, either... :(
Error using strsplit (line 80)t
First input must be either a character vector or a string scalar.
>> strsplit(char(Clean{:,1})) % but it can handle a char() array as the message says
ans =
1×3 cell array
{'2019-04-22'} {'Clean'} {'A8'}
>> strsplit(string(Clean{:,1})) % or a string...
ans =
1×3 string array
"2019-04-22" "Clean" "A8"
>> strsplit(string(Clean(:,1))) % but notice you have to dereference the content or...
Error using string
Conversion to string from table is not possible.
>>
4 Commenti
Stephen23
il 12 Giu 2019
@Jonathan Bijman: please upload the variable tiempo in a .mat file by clicking the paperclip button.
Vedere anche
Categorie
Scopri di più su Cell Arrays in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!