Adding a Column to a Table

Hello everyone, I've just started out with Matlab for uni and am trying to add a column to a table. I ran into the following error message
Error using .
To assign to or create a variable in a table, the number of rows must match the height of the table.
My code is written below:
%Creates a table called 'tab' using the data in the coronavirus-cases.csv
%file.
tab = readtable("coronavirus-cases.csv");
%Creates a row of zeros with the same height as tab.
newTabCol = zeros(height(tab), 1);
%Adds the column and titles it "Seven Day Average".
tab.newTabCol = "Seven Day Average";
What confuses me is that the height of newTabCol matches tab. Both have 153772 rows:
I'm sure I'm missing something basic but any help would be appreciated.
Kind regards,
John

 Accepted Answer

The variable name/title should be used after using the dot notation inside parenthesis and the data to append should be on the right side of the equation.
%Creates a row of zeros with the same height as tab.
newTabCol = zeros(height(tab), 1);
%Adds the column and titles it "Seven Day Average".
tab.("Seven Day Average") = newTabCol;

2 Comments

Thanks so much Dyuman!
You are welcome!
Also, do check out Image Analst's suggestion as well.

Sign in to comment.

More Answers (1)

To add a column to a table, use addvars
help addvars
--- help for table/addvars --- ADDVARS Add variables to table or timetable. T2 = ADDVARS(T1, VAR1, ..., VARN) appends the arrays VAR1,...,VARN as variables to the table T1. VAR1,...,VARN can include arrays of any type, including tables and timetables. All input arguments must have the same number of rows. T2 = ADDVARS(..., 'Before', LOCATION) T2 = ADDVARS(..., 'After', LOCATION) inserts the variables either before or after the position specified by LOCATION. LOCATION is a positive integer, a variable name, or a logical vector containing a single true value. ADDVARS(..., 'After', width(T1)) is equivalent to the default behavior. T2 = ADDVARS(..., 'NewVariableNames', NEWNAMES) specifies the names of the variables added in T2. NEWNAMES is a string array or cell array containing the same number of names as the number of added variables. Examples: % Load a table load fatalities.mat % Add per-capita deaths to table fatalities = addvars(fatalities, ... fatalities.deaths./fatalities.drivers, ... 'NewVariableNames', 'deathsPerThousand', ... 'After', 'drivers'); See also REMOVEVARS, MOVEVARS, SPLITVARS, MERGEVARS. Help for table/addvars is inherited from superclass tabular Documentation for table/addvars doc table/addvars Other uses of addvars codistributed/addvars gpuArray/addvars tall/addvars distributed/addvars tabular/addvars

2 Comments

I read all that, tried it and it didn't work (or I hadn't rotated the vector yet with ' )
What did work is
A = zeros([1 size(app.StimInputTable.Data,1)]);
app.StimInputTable.Data.Var4 = A';
I suppose that
A = zeros([1 size(app.StimInputTable.Data,1)]);
app.StimInputTable.Data = ADDVARS(app.StimInputTable.Data, A');
might also work if I get all the app.'s and .Data's and A' in the right place but noone explains about rotating the vector to a column in the Help or in answers copied from Help.
T = array2table([10 9 8])
T = 1x3 table
Var1 Var2 Var3 ____ ____ ____ 10 9 8
T.GHI = [1 2 3 4]
T = 1x4 table
Var1 Var2 Var3 GHI ____ ____ ____ ________________ 10 9 8 1 2 3 4
The key here is that the variable to be added might legitimately have multiple columns, so the process of adding a variable cannot automatically flip vectors -- it might be the wrong thing to do.

Sign in to comment.

Categories

Products

Release

R2023b

Community Treasure Hunt

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

Start Hunting!