如果string是单个字符,cell2table将从第一列中删除值

时间:2016-09-02 18:40:35

标签: matlab cell

假设您有以下数据:

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]  

如何在不转向繁琐的解决方法的情况下解决这个问题?

1 个答案:

答案 0 :(得分:2)

这可能与table的数据内部表示有关。它似乎正在尝试垂直连接列中的数据,如果连接成功,则它使用数组,否则它将其存储为cell

如果是单个字符N以及数字14,则可以连接它们而不会出错;但是,它将它们全部转换为字符。

vertcat('N', 1, 4)

但是,当您添加空格时,连接现在失败

vertcat('N ', 1, 4)

输出显示为单元格。

您有几个选择:

  1. 使用table.Properties.VariableUnits存储单位,而不是尝试将单位合并到表格中。

    table_of_data.Properties.VariableUnits = units;
    
  2. 在列标题中显示单位

    headers = {'force_N', 'mass_kg', 'acceleration_m_s2'};
    
  3. 创建一个双嵌套的单元格数组来存储所有单元,这些单元明确地使它在内部存储为单元格数组。

    table_of_data = cell2table([num2cell(units); num2cell(A)])