add new row to table with missing values

How can I add a new row to an existing table with missing values?
For illustration, I define a table T with 4 variables: name, city, age, height.
V.name = "Ann";
V.city = "Berlin";
V.age = 24;
V.height = 172;
T = struct2table(V);
Now, I want to add another row to this table where the new row only contains values for 3 of the variables (out of 4).
V2.name = "Luka";
V2.city = "Tokyo";
V2.age = 30;
T = [T; struct2table(V2)];
All tables being vertically concatenated must have the same number of variables.
This leads to the following error:
"All tables being vertically concatenated must have the same number of variables."
What's the best practice for such situations?

Respuestas (1)

KSSV
KSSV el 18 de En. de 2022
V.name = "Ann";
V.city = "Berlin";
V.age = 24;
V.height = 172;
T1 = struct2table(V);
V2.name = "Luka";
V2.city = "Tokyo";
V2.age = 30;
T2 = struct2table(V2);
T2.height = NaN ;
T = [T1;T2]
T = 2×4 table
name city age height ______ ________ ___ ______ "Ann" "Berlin" 24 172 "Luka" "Tokyo" 30 NaN

4 comentarios

Amirali Kamalian
Amirali Kamalian el 18 de En. de 2022
Thank you for the quick answer. The example I added here is just for illustration and the actual table is much bigger. It would be cumbersome to detect the missing variables in each iteration and then assign NaN (or empty) to those? Do you know of a more flexible way e.g. a built-in function that does just these?
KSSV
KSSV el 18 de En. de 2022
Do you have all the data in a structure? How is your data?
Amirali Kamalian
Amirali Kamalian el 18 de En. de 2022
In each sequence of a for loop, a new row is added to the table. The values for the new row are collected in a struct and then struct2table is called to update the table with a new row.
Are you suggesting to collect all the data in a struct array and then convert that to a table in a single struct2table call? Does that give more flexibility in terms of "missing" values?
YEs exactly. That makes your life very easy.
V = struct ;
V(1).name = "Ann";
V(1).city = "Berlin";
V(1).age = 24;
V(1).height = 172;
V(2).name = "Luka";
V(2).city = "Tokyo";
V(2).age = 30;
T = struct2table(V)
T = 2×4 table
name city age height ______ ________ ___ ____________ "Ann" "Berlin" 24 {[ 172]} "Luka" "Tokyo" 30 {0×0 double}

Iniciar sesión para comentar.

Categorías

Más información sobre Data Type Identification en Centro de ayuda y File Exchange.

Productos

Versión

R2020b

Preguntada:

el 18 de En. de 2022

Comentada:

el 18 de En. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by