Splitting a String in a table once

The table provided in the picture is an example of the one i am working with (main table has over 4600 rows). I want/ need to split the first colum at the first white space. So that the output would be "ACTB" and "diff1 day 30" for example.
My internet research has brought me to the function
regexp()
with the parameters: (data,' ','split','once')
data = nameofthetable.columname
So far this hasn't worked for me, since i get the following error:
Error using regexp
The 'STRING' input must be either a char row vector, a cell array of char row vectors, or a
string array.
My question is can i even use this function with a table enviroment and if so how can i make it work and insert a new row? Or is the data type of the first colum wrong and not even a string?
I hope u can help me with this problem.
Thanks in advance.

 采纳的回答

I can tell from the way that the table displays that the entries are categorical() not character or string(). You would need to string() the variable before you can regex

3 个评论

So if i understand it correctly " " always indicates a string right?
if i do string() it gives me a table with the string which is seperated from the other table. Is there a way to directly alter them in the original table? And if not how can i combine does two?
Thank you for your help! :)
S = ["ACTB (rep 1)"; "ACTB ipsc"];
CS = categorical(S);
T = table(S, CS)
T = 2×2 table
S CS ______________ ____________ "ACTB (rep 1)" ACTB (rep 1) "ACTB ipsc" ACTB ipsc
Notice that inside tables, string() objects have the "" decoration around the entries, but categorical() objects have no decoration.
back = string(T.CS)
back = 2×1 string array
"ACTB (rep 1)" "ACTB ipsc"
splits = regexp(back, '\s+', 'split', 'once')
splits = 2×1 cell array
{["ACTB" "(rep 1)"]} {["ACTB" "ipsc" ]}
You do not string() the table, you string() a variable in the table, and the result is a string array. You can insert the results into the table:
variety = categorical(cellfun(@(S) S(:,1), splits));
details = cellfun(@(S) S(:,2), splits);
T.variety = variety;
T.details = details;
T
T = 2×4 table
S CS variety details ______________ ____________ _______ _________ "ACTB (rep 1)" ACTB (rep 1) ACTB "(rep 1)" "ACTB ipsc" ACTB ipsc ACTB "ipsc"
Thank you for the help! :)

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Tables 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by