Main Content

cell2table

Convert cell array to table

Description

T = cell2table(C) converts the contents of an m-by-n cell array to an m-by-n table. Each column of the input cell array provides the data contained in a variable of the output table.

To create variable names in the output table, cell2table appends column numbers to the input array name. If the input array has no name, then cell2table creates variable names of the form "Var1",...,"VarN", where N is the number of columns in the cell array.

T = cell2table(C,Name,Value) creates a table from a cell array with additional options specified by one or more Name,Value pair arguments.

For example, you can specify row names or variable names to include in the table.

example

Examples

collapse all

Create a cell array that contains strings and numeric data. (Cell arrays of strings are not recommended. But in this case, it is appropriate to include strings in a cell array that contains both strings and numbers. This cell array is not a container for text, but for values that are grouped together though they have different data types.)

C = {5 "cereal" 110 "C+"; 12 "pizza" 140 "B";...
    23 "salmon" 367 "A"; 2 "cookies" 160 "D"}
C=4×4 cell array
    {[ 5]}    {["cereal" ]}    {[110]}    {["C+"]}
    {[12]}    {["pizza"  ]}    {[140]}    {["B" ]}
    {[23]}    {["salmon" ]}    {[367]}    {["A" ]}
    {[ 2]}    {["cookies"]}    {[160]}    {["D" ]}

Convert the cell array, C, to a table and specify variable names.

T = cell2table(C,...
    "VariableNames",["Age" "FavoriteFood" "Calories" "NutritionGrade"])
T=4×4 table
    Age    FavoriteFood    Calories    NutritionGrade
    ___    ____________    ________    ______________

     5      "cereal"         110            "C+"     
    12      "pizza"          140            "B"      
    23      "salmon"         367            "A"      
     2      "cookies"        160            "D"      

The variables T.Age and T.Calories are numeric while the variables T.FavoriteFood and T.NutritionGrade are string arrays.

Convert a cell array to a table, and then include the first row from the cell array as variable names for the table.

Create a cell array where the first row contains strings to identify column headings. (Cell arrays of strings are not recommended. But in this case, it is appropriate to include strings in a cell array that contains strings, numbers, and logical values. This cell array is not a container for text, but for values that are grouped together though they have different data types.)

Patients = {"LastName" "Age" "Height" "Weight" "Smoker";...
    "Chang" 38 71 176 true;...
    "Brown" 43 69 163 false;...
    "Ruiz" 38 64 131 false;...
    "Lee" 38 64 131 false;...
    "Smith" 40 67 133 false;...
    "Garcia" 49 64 119 false}
Patients=7×5 cell array
    {["LastName"]}    {["Age"]}    {["Height"]}    {["Weight"]}    {["Smoker"]}
    {["Chang"   ]}    {[   38]}    {[      71]}    {[     176]}    {[       1]}
    {["Brown"   ]}    {[   43]}    {[      69]}    {[     163]}    {[       0]}
    {["Ruiz"    ]}    {[   38]}    {[      64]}    {[     131]}    {[       0]}
    {["Lee"     ]}    {[   38]}    {[      64]}    {[     131]}    {[       0]}
    {["Smith"   ]}    {[   40]}    {[      67]}    {[     133]}    {[       0]}
    {["Garcia"  ]}    {[   49]}    {[      64]}    {[     119]}    {[       0]}

Exclude the columns headings and convert the contents of the cell array to a table.

C = Patients(2:end,:);
T = cell2table(C)
T=6×5 table
       C1       C2    C3    C4      C5  
    ________    __    __    ___    _____

    "Chang"     38    71    176    true 
    "Brown"     43    69    163    false
    "Ruiz"      38    64    131    false
    "Lee"       38    64    131    false
    "Smith"     40    67    133    false
    "Garcia"    49    64    119    false

The table, T, has variable names C1,...,C5.

Change the variable names by setting the table property, T.Properties.VariableNames, to include the names from the first row of the cell array. To extract the names from the first row, use curly braces. Then concatenate the names into a string array. Assign the string array to T.Properties.VariableNames.

LastName = [Patients{1,:}]
LastName = 1x5 string
    "LastName"    "Age"    "Height"    "Weight"    "Smoker"

T.Properties.VariableNames = LastName
T=6×5 table
    LastName    Age    Height    Weight    Smoker
    ________    ___    ______    ______    ______

    "Chang"     38       71       176      true  
    "Brown"     43       69       163      false 
    "Ruiz"      38       64       131      false 
    "Lee"       38       64       131      false 
    "Smith"     40       67       133      false 
    "Garcia"    49       64       119      false 

Input Arguments

collapse all

Input cell array, specified as a 2-D cell array. Each column of C provides data for a table variable.

If the contents of the cells in a column of C have:

  • Compatible sizes and data types, and each cell has an array with one row, then the corresponding table variable is a homogeneous array.

    Example:

    C = {[1 2] 3; [4 5] 6}
    T = cell2table(C)
    
    T =
      2×2 table
          C1      C2
        ______    __
        1    2    3 
        4    5    6 
    
  • Different sizes, incompatible data types, or any cell has either an object that must be a scalar or an array with more than one row, then the corresponding table variable is a cell array.

    (For example, dictionaries and function handles are always scalars. Objects that must be scalars cannot be concatenated into a homogenous array. Therefore, cell2table must collect them into a cell array.)

    Example:

    C = {[1 2] 3; 4 5}
    T = cell2table(C)
    
    T =
      2×2 table
          C1       C2
        _______    __
        {[1 2]}    3 
        {[  4]}    5 
    

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

Example: "RowNames",["row1","row2","row3"] uses the row names, row1, row2, and row3 for the table, T.

Row names, specified as a cell array of character vectors or string array, whose elements are nonempty and distinct. The number of row names must equal the number of rows of the input array.

Row names can have any Unicode® characters, including spaces and non-ASCII characters, except for ':'.

If you specify row names that have leading or trailing whitespace characters, then cell2table removes them from the row names.

Variable names, specified as a cell array of character vectors or a string array, whose elements are nonempty and distinct. The number of variable names must equal the number of columns of the input array.

Variable names can have any Unicode characters, including spaces and non-ASCII characters. However, a variable name cannot match any table dimension name or the reserved names 'Properties', 'RowNames', 'VariableNames', or ':'.

Since R2021a

Dimension names, specified as a two-element cell array of character vectors or two-element string array whose elements are nonempty and distinct.

Dimension names can have any Unicode characters, including spaces and non-ASCII characters. However, a dimension name cannot match any table variable name or the reserved names 'Properties', 'RowNames', 'VariableNames', or ':'.

As an alternative, in all releases you can specify dimension names by setting the DimensionNames property of the table.

Output Arguments

collapse all

Output table, returned as a table. The table can store metadata such as descriptions, variable units, variable names, and row names. For more information, see the Properties section of table.

Extended Capabilities

Thread-Based Environment
Run code in the background using MATLAB® backgroundPool or accelerate code with Parallel Computing Toolbox™ ThreadPool.

Version History

Introduced in R2013b

expand all