Table array with numerical row names

Ken (view profile)

on 29 Mar 2018
Latest activity Edited by Sean de Wolski

on 28 Jan 2019

Guillaume (view profile)

I'm trying to create a table array where the row names are a vector of doubles, but row names are required to be a cell array of strings. How would someone do this?

Guillaume (view profile)

on 29 Mar 2018

Convert your numbers to a cell array of char array (strings are not supported strangely). If the vector of numbers is all integers:
rownames = compose('%d', yourvector);
If it's real numbers then specify the appropriate format string in compose or matlab let do its thing with:
rownames = cellstr(string(yourvector));
Then create your table whichever way you were going to use, e.g.:
t = array2table(somearray, 'RowNames', rownames)

Sean de Wolski (view profile)

on 28 Jan 2019
Edited by Sean de Wolski

Sean de Wolski (view profile)

on 28 Jan 2019

You could use matlab.lang.makeValidName to make valid names for each one. However, for the numeric case, this just adds x so you could do that directly and choose another letter or word, perhaps r or row:
matlab.lang.makeValidName(string(1:10))
ans =
1×10 string array
"x1" "x2" "x3" "x4" "x5" "x6" "x7" "x8" "x9" "x10"
Or
"r"+(1:10)

Elias Gule (view profile)

on 29 Mar 2018

Convert your vector of strings to a cell array of strings.
v = 1 : 20; % replace with your vector
row_names = arrayfun(@num2str,v,'uni',0);

Guillaume

Guillaume (view profile)

on 29 Mar 2018
strings are actually not supported for row names. The cell array must contain char vectors
Note that the above does create a cell array of char vectors, not strings.

Peter Perkins (view profile)

on 29 Mar 2018

The variable names in a table not only need to be text, they also need to be valid MATLAB identifiers (as do the field names in a struct). So while you might think to do this ...
>> t = table([1;2;3],[4;5;6],'VariableNames',{'1' '2'})
Error using table (line 307)
'1' is not a valid variable name.
... you can't. But hang on a minute - create this table:
>> t = table([1;2;3],[4;5;6],'VariableNames',{'one' 'two'})
t =
3×2 table
one two
___ ___
1 4
2 5
3 6
Now index into it using the numbers you'd like to have as the variable names:
>> t(:,1:2)
ans =
3×2 table
one two
___ ___
1 4
2 5
3 6
>> t{:,1:2}
ans =
1 4
2 5
3 6
and even
>> t.(1)
ans =
1
2
3
What is it that you can't do right now, except have '1' displayed as the name?

math man

math man (view profile)

on 28 Jan 2019
For me, the idea is to have a set of Variable names which I can read in from elsewhere (perhaps a vector of 15 to 20 numbers). I'd then like to be able to refer to them. So ideally I'd have a set of variablesnames which I can call dynamically (NOT just assigning 'One', 'Two', etc.), and also which I can refer to for the purposes of Indexing, like in Excel.
so
numbervariablenames = otherarray(1,:)
t = table(somedata,'VariableNames',numbervariablenames)
and I want to be able to do: