Adding a New Column to a Table but get a warning?
12 ビュー (過去 30 日間)
古いコメントを表示
Hello. I wanted to add a new column from a (500 x 4) Table, with some conditions, to another (500 x 13) Table. Not so sure why I get this warning sign, though they have the same number of row:
Warning: The new variables being added to the table have fewer rows than
the table. They have been extended with rows containing default values.
> In tabular/subsasgnDot (line 327)
In tabular/subsasgn (line 67)
Here is my code:
for i=1:size(Table1.Std,1); % count the number of rows in Table 1 (500x4)
if Table1.Std(i) > 10 || Table1.Std(i) <-10; % conditions applied
Table2.NewStd(i) =1; % adding a new column in Table 2
else Table2.NewStd(i) =0;
end
end
0 件のコメント
採用された回答
Steven Lord
2017 年 8 月 2 日
What is size(1, 1)? The scalar 1 has exactly 1 row. Since you receive that warning the table Table2 must have more than 1 row. As a simpler example:
>> T = table((1:3).', 'VariableNames', {'Variable1'});
>> numberOfRows = height(T)
numberOfRows =
3
>> T.Variable2(1) = 17
Warning: The new variables being added to the table have fewer rows than the table.
They have been extended with rows containing default values.
In this case I added a new variable with 1 row to a table with 3 rows. The new variable must contain the same number of rows as the existing variable(s) so MATLAB issues a warning and fills in the extra spaces. Since the new variable contains double precision data, the default value used to fill in is 0.
In this case, you can use logical indexing.
% Preallocate
T.Variable3 = zeros(height(T), 1);
% Update
T.Variable3(T.Variable2 > 0) = 42
or create the variable of the correct size first, then add the whole variable in one statement.
V4 = T.Variable1+T.Variable2-T.Variable3;
T.Variable4 = V4
5 件のコメント
Steven Lord
2017 年 8 月 2 日
No, i is not the number of rows of Table2.NewStd, not all the time.
for i = 1:10
disp(i)
end
In this example, i will take on values from the vector 1:10. For one iteration, it will be 2. For another iteration, it will be 7. For the first iteration, it is 1.
Here's an example that does not involve a table that will hopefully clarify things.
A = [1; 2; 3; 4; 5]
A(1, 2) = 42
What is the size of A after executing these two commands?
I never assigned anything to A(4, 2) but it has a value. What is that value? Why does that element have that value?
This behavior is the same as the behavior for table, except table issues a warning when it grows a variable like that.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Tables についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!