假设您有以下数据:
A = [1,2,3;4,5,6];
headers = {'force', 'mass', 'acceleration'};
units = {'N','Kg','m/s^2'};
假设我想将其转换为一个表格,其中headers
将是'VariableNames'
:
table_of_data = cell2table([units; num2cell(A)]);
table_of_data.Properties.VariableNames = headers
table_of_data =
force mass acceleration
_____ ____ ____________
N 'Kg' 'm/s^2'
[2] [3]
[5] [6]
请注意,A
的前两列已删除。这是因为MATLAB以不同于N
和'Kg'
的方式处理单个字符'm/s^2'
。如果我在'N '
之后插入空格:
table_of_data =
force mass acceleration
_____ ____ ____________
'N ' 'Kg' 'm/s^2'
[1] [2] [3]
[4] [5] [6]
如何在不插入空格'N '
的情况下显示所有元素的情况下获得正确的表格?
如果我向单元格数组添加更多行,例如units
,则在[headers; units; num2cell(A)]
中使用单个字符没有问题,因此以下工作原理:
table_of_data = cell2table([headers; units; num2cell(A)]);
table_of_data(1,:) = [];
table_of_data.Properties.VariableNames = headers
table_of_data =
force mass acceleration
_____ ____ ____________
'N ' 'Kg' 'm/s^2'
[1] [2] [3]
[4] [5] [6]
如何在不转向繁琐的解决方法的情况下解决这个问题?
答案 0 :(得分:2)
这可能与table
的数据内部表示有关。它似乎正在尝试垂直连接列中的数据,如果连接成功,则它使用数组,否则它将其存储为cell
。
如果是单个字符N
以及数字1
和4
,则可以连接它们而不会出错;但是,它将它们全部转换为字符。
vertcat('N', 1, 4)
但是,当您添加空格时,连接现在失败
vertcat('N ', 1, 4)
输出显示为单元格。
您有几个选择:
使用table.Properties.VariableUnits
存储单位,而不是尝试将单位合并到表格中。
table_of_data.Properties.VariableUnits = units;
在列标题中显示单位
headers = {'force_N', 'mass_kg', 'acceleration_m_s2'};
创建一个双嵌套的单元格数组来存储所有单元,这些单元明确地使它在内部存储为单元格数组。
table_of_data = cell2table([num2cell(units); num2cell(A)])