Clear Filters
Clear Filters

Add table variable and assign constant string

34 views (last 30 days)
I want to add a new variable to a table and assign a string to that variable for every row of the table.
T = table({'A';'B';'C'},[1;2;1],[6;7;5],...
'VariableNames',{'Section' 'Data1' 'Data2'})
newString = "Project A"
T.newVar(:) = {newString}
T =
Section Data1 Data2 newVar
_______ _____ _____ __________
'A' 1 6 [1x0 cell]
'B' 2 7 [1x0 cell]
'C' 1 5 [1x0 cell]
What I'd like is....T=
Section Data1 Data2 newVar
_______ _____ _____ __________
'A' 1 6 'Project A'
'B' 2 7 'Project A'
'C' 1 5 'Project A'

Accepted Answer

Walter Roberson
Walter Roberson on 7 Nov 2016
T.newVar = repmat({newString}, size(T,1), 1)
  2 Comments
Guillaume
Guillaume on 7 Nov 2016
Edited: Guillaume on 7 Nov 2016
Well, actually, if string means the new string type introduced in 2016b (as the double quotes would indicate), then:
T.newVar = repmat(string('Project A'), height(T), 1)

Sign in to comment.

More Answers (1)

Peter Perkins
Peter Perkins on 9 Nov 2016
This slight change to the original code also works:
>> T.newVar(:,1) = newString % note the ",1"
T =
Section Data1 Data2 newVar
_______ _____ _____ ___________
'A' 1 6 "Project A"
'B' 2 7 "Project A"
'C' 1 5 "Project A"
  2 Comments
Guillaume
Guillaume on 10 Nov 2016
That is interesting. Is it documented anywhere?
It also does not make sense that one syntax works and the other doesn't since for a column vector (:) and (:, 1) should be exactly equivalent.
Peter Perkins
Peter Perkins on 10 Nov 2016
Using (:,1) to create a new column vector is standard MATLAB syntax, and is sometimes needed to make sure your result becomes a column vector.
The issue here is that newVar doesn't yet exist as a column vector when you make the assignment. But in a table, it does seem like it shouldn't be needed. I will make a note to have that looked into.

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!