필터 지우기
필터 지우기

Adding a Column to a Table

조회 수: 1,606 (최근 30일)
John
John 2023년 10월 6일
댓글: Walter Roberson 대략 3시간 전
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

채택된 답변

Dyuman Joshi
Dyuman Joshi 2023년 10월 6일
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
John
John 2023년 10월 6일
Thanks so much Dyuman!
Dyuman Joshi
Dyuman Joshi 2023년 10월 6일
You are welcome!
Also, do check out Image Analst's suggestion as well.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Image Analyst
Image Analyst 2023년 10월 6일
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
Alessandro Livi
Alessandro Livi 대략 7시간 전
편집: Walter Roberson 대략 4시간 전
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.
Walter Roberson
Walter Roberson 대략 3시간 전
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.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품


릴리스

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by