Add, Delete, and Rearrange Table Variables

This example shows how to add, delete, and rearrange column-oriented variables in a table. You can add, move, and delete table variables using the addvars, movevars, and removevars functions. As alternatives, you also can modify table variables using dot syntax or by indexing into the table. Use the splitvars and mergevars functions to split multicolumn variables and combine multiple variables into one. Finally, you can reorient a table so that the rows of the table become variables of an output table, using the rows2vars function.

You also can modify table variables using the Variables Editor.

Load Sample Data and Create Tables

Load arrays of sample data from the patients MAT-file. Display the names and sizes of the variables loaded into the workspace.

load patients
whos -file patients
  Name                            Size            Bytes  Class      Attributes

  Age                           100x1               800  double               
  Diastolic                     100x1               800  double               
  Gender                        100x1             12212  cell                 
  Height                        100x1               800  double               
  LastName                      100x1             12416  cell                 
  Location                      100x1             15008  cell                 
  SelfAssessedHealthStatus      100x1             12340  cell                 
  Smoker                        100x1               100  logical              
  Systolic                      100x1               800  double               
  Weight                        100x1               800  double               

Create two tables. Create one table, T, with information collected from a patient questionnaire and create another table, T2, with data measured from patients. Each table has 100 rows.

T = table(Age,Gender,Smoker);
T2 = table(Height,Weight,Systolic,Diastolic);

Display the first five rows of each table.

head(T,5)
ans=5×3 table
    Age      Gender      Smoker
    ___    __________    ______

    38     {'Male'  }    true  
    43     {'Male'  }    false 
    38     {'Female'}    false 
    40     {'Female'}    false 
    49     {'Female'}    false 

head(T2,5)
ans=5×4 table
    Height    Weight    Systolic    Diastolic
    ______    ______    ________    _________

      71       176        124          93    
      69       163        109          77    
      64       131        125          83    
      67       133        117          75    
      64       119        122          80    

Add Variables Concatenated from Another Table

Add variables to the table T by horizontally concatenating it with T2.

T = [T T2];

Display the first five rows of T.

head(T,5)
ans=5×7 table
    Age      Gender      Smoker    Height    Weight    Systolic    Diastolic
    ___    __________    ______    ______    ______    ________    _________

    38     {'Male'  }    true        71       176        124          93    
    43     {'Male'  }    false       69       163        109          77    
    38     {'Female'}    false       64       131        125          83    
    40     {'Female'}    false       67       133        117          75    
    49     {'Female'}    false       64       119        122          80    

The table T now has 7 variables and 100 rows.

If the tables that you are horizontally concatenating have row names, horzcat concatenates the tables by matching the row names. Therefore, the tables must use the same row names, but the row order does not matter.

Add Variable from Workspace to Table

Add the names of patients from the workspace variable LastName before the first table variable in T. You can specify any location in the table using the name of a variable near the new location. Use quotation marks to refer to the names of table variables. However, do not use quotation marks for input arguments that are workspace variables.

T = addvars(T,LastName,'Before','Age');
head(T,5)
ans=5×8 table
      LastName      Age      Gender      Smoker    Height    Weight    Systolic    Diastolic
    ____________    ___    __________    ______    ______    ______    ________    _________

    {'Smith'   }    38     {'Male'  }    true        71       176        124          93    
    {'Johnson' }    43     {'Male'  }    false       69       163        109          77    
    {'Williams'}    38     {'Female'}    false       64       131        125          83    
    {'Jones'   }    40     {'Female'}    false       67       133        117          75    
    {'Brown'   }    49     {'Female'}    false       64       119        122          80    

You also can specify locations in a table using numbers. For example, the equivalent syntax using a number to specify location is T = addvars(T,LastName,'Before',1).

Add Variables Using Dot Syntax

An alternative way to add new table variables is to use dot syntax. When you use dot syntax, you always add the new variable as the last table variable. You can add a variable that has any data type, as long as it has the same number of rows as the table.

Create a new variable for blood pressure as a horizontal concatenation of the two variables Systolic and Diastolic. Add it to T.

T.BloodPressure = [Systolic Diastolic];
head(T,5)
ans=5×9 table
      LastName      Age      Gender      Smoker    Height    Weight    Systolic    Diastolic    BloodPressure
    ____________    ___    __________    ______    ______    ______    ________    _________    _____________

    {'Smith'   }    38     {'Male'  }    true        71       176        124          93         124     93  
    {'Johnson' }    43     {'Male'  }    false       69       163        109          77         109     77  
    {'Williams'}    38     {'Female'}    false       64       131        125          83         125     83  
    {'Jones'   }    40     {'Female'}    false       67       133        117          75         117     75  
    {'Brown'   }    49     {'Female'}    false       64       119        122          80         122     80  

T now has 9 variables and 100 rows. A table variable can have multiple columns. So although BloodPressure has two columns, it is one table variable.

Add a new variable, BMI, in the table T, that contains the body mass index for each patient. BMI is a function of height and weight. When you calculate BMI, you can refer to the Weight and Height variables that are in T.

T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2;

The operators ./ and .^ in the calculation of BMI indicate element-wise division and exponentiation, respectively.

Display the first five rows of the table T.

head(T,5)
ans=5×10 table
      LastName      Age      Gender      Smoker    Height    Weight    Systolic    Diastolic    BloodPressure     BMI  
    ____________    ___    __________    ______    ______    ______    ________    _________    _____________    ______

    {'Smith'   }    38     {'Male'  }    true        71       176        124          93         124     93      24.547
    {'Johnson' }    43     {'Male'  }    false       69       163        109          77         109     77      24.071
    {'Williams'}    38     {'Female'}    false       64       131        125          83         125     83      22.486
    {'Jones'   }    40     {'Female'}    false       67       133        117          75         117     75      20.831
    {'Brown'   }    49     {'Female'}    false       64       119        122          80         122     80      20.426

Move Variable in Table

Move the table variable BMI using the movevars function, so that it is after the variable Weight. When you specify table variables by name, use quotation marks.

T = movevars(T,'BMI','After','Weight');
head(T,5)
ans=5×10 table
      LastName      Age      Gender      Smoker    Height    Weight     BMI      Systolic    Diastolic    BloodPressure
    ____________    ___    __________    ______    ______    ______    ______    ________    _________    _____________

    {'Smith'   }    38     {'Male'  }    true        71       176      24.547      124          93         124     93  
    {'Johnson' }    43     {'Male'  }    false       69       163      24.071      109          77         109     77  
    {'Williams'}    38     {'Female'}    false       64       131      22.486      125          83         125     83  
    {'Jones'   }    40     {'Female'}    false       67       133      20.831      117          75         117     75  
    {'Brown'   }    49     {'Female'}    false       64       119      20.426      122          80         122     80  

You also can specify locations in a table using numbers. For example, the equivalent syntax using a number to specify location is T = movevars(T,'BMI,'After',6). It is often more convenient to refer to variables by name.

Move Table Variable Using Indexing

As an alternative, you can move table variables by indexing. You can index into a table using the same syntax you use for indexing into a matrix.

Move BloodPressure so that it is next to BMI.

T = T(:,[1:7 10 8 9]);
head(T,5)
ans=5×10 table
      LastName      Age      Gender      Smoker    Height    Weight     BMI      BloodPressure    Systolic    Diastolic
    ____________    ___    __________    ______    ______    ______    ______    _____________    ________    _________

    {'Smith'   }    38     {'Male'  }    true        71       176      24.547     124     93        124          93    
    {'Johnson' }    43     {'Male'  }    false       69       163      24.071     109     77        109          77    
    {'Williams'}    38     {'Female'}    false       64       131      22.486     125     83        125          83    
    {'Jones'   }    40     {'Female'}    false       67       133      20.831     117     75        117          75    
    {'Brown'   }    49     {'Female'}    false       64       119      20.426     122     80        122          80    

In a table with many variables, it is often more convenient to use the movevars function.

Delete Variables

To delete table variables, use the removevars function. Delete the Systolic and Diastolic table variables.

T = removevars(T,{'Systolic','Diastolic'});
head(T,5)
ans=5×8 table
      LastName      Age      Gender      Smoker    Height    Weight     BMI      BloodPressure
    ____________    ___    __________    ______    ______    ______    ______    _____________

    {'Smith'   }    38     {'Male'  }    true        71       176      24.547     124     93  
    {'Johnson' }    43     {'Male'  }    false       69       163      24.071     109     77  
    {'Williams'}    38     {'Female'}    false       64       131      22.486     125     83  
    {'Jones'   }    40     {'Female'}    false       67       133      20.831     117     75  
    {'Brown'   }    49     {'Female'}    false       64       119      20.426     122     80  

Delete Variable Using Dot Syntax

As an alternative, you can delete variables using dot syntax and the empty matrix, []. Remove the Age variable from the table.

T.Age = [];
head(T,5)
ans=5×7 table
      LastName        Gender      Smoker    Height    Weight     BMI      BloodPressure
    ____________    __________    ______    ______    ______    ______    _____________

    {'Smith'   }    {'Male'  }    true        71       176      24.547     124     93  
    {'Johnson' }    {'Male'  }    false       69       163      24.071     109     77  
    {'Williams'}    {'Female'}    false       64       131      22.486     125     83  
    {'Jones'   }    {'Female'}    false       67       133      20.831     117     75  
    {'Brown'   }    {'Female'}    false       64       119      20.426     122     80  

Delete Variable Using Indexing

You also can delete variables using indexing and the empty matrix, []. Remove the Gender variable from the table.

T(:,'Gender') = [];
head(T,5)
ans=5×6 table
      LastName      Smoker    Height    Weight     BMI      BloodPressure
    ____________    ______    ______    ______    ______    _____________

    {'Smith'   }    true        71       176      24.547     124     93  
    {'Johnson' }    false       69       163      24.071     109     77  
    {'Williams'}    false       64       131      22.486     125     83  
    {'Jones'   }    false       67       133      20.831     117     75  
    {'Brown'   }    false       64       119      20.426     122     80  

Split and Merge Table Variables

To split multicolumn table variables into variables that each have one column, use the splitvars functions. Split the variable BloodPressure into two variables.

T = splitvars(T,'BloodPressure','NewVariableNames',{'Systolic','Diastolic'});
head(T,5)
ans=5×7 table
      LastName      Smoker    Height    Weight     BMI      Systolic    Diastolic
    ____________    ______    ______    ______    ______    ________    _________

    {'Smith'   }    true        71       176      24.547      124          93    
    {'Johnson' }    false       69       163      24.071      109          77    
    {'Williams'}    false       64       131      22.486      125          83    
    {'Jones'   }    false       67       133      20.831      117          75    
    {'Brown'   }    false       64       119      20.426      122          80    

Similarly, you can group related table variables together in one variable, using the mergevars function. Combine Systolic and Diastolic back into one variable, and name it BP.

T = mergevars(T,{'Systolic','Diastolic'},'NewVariableName','BP');
head(T,5)
ans=5×6 table
      LastName      Smoker    Height    Weight     BMI          BP    
    ____________    ______    ______    ______    ______    __________

    {'Smith'   }    true        71       176      24.547    124     93
    {'Johnson' }    false       69       163      24.071    109     77
    {'Williams'}    false       64       131      22.486    125     83
    {'Jones'   }    false       67       133      20.831    117     75
    {'Brown'   }    false       64       119      20.426    122     80

Reorient Rows To Become Variables

You can reorient the rows of a table or timetable, so that they become the variables the output table, using the rows2vars function. However, if the table has multicolumn variables, then you must split them before you can call rows2vars.

Reorient the rows of T. Specify that the names of the patients in T are the names of table variables in the output table. The first variable of T3 contains the names of the variables of T. Each remaining variable of T3 contains the data from the corresponding row of T.

T = splitvars(T,'BP','NewVariableNames',{'Systolic','Diastolic'});
T3 = rows2vars(T,'VariableNamesSource','LastName');
T3(:,1:5)
ans=6×5 table
    OriginalVariableNames    Smith     Johnson    Williams    Jones 
    _____________________    ______    _______    ________    ______

        {'Smoker'   }             1         0           0          0
        {'Height'   }            71        69          64         67
        {'Weight'   }           176       163         131        133
        {'BMI'      }        24.547    24.071      22.486     20.831
        {'Systolic' }           124       109         125        117
        {'Diastolic'}            93        77          83         75

You can use dot syntax with T3 to access patient data as an array. However, if the row values of an input table cannot be concatenated, then the variables of the output table are cell arrays.

T3.Smith
ans = 6×1

    1.0000
   71.0000
  176.0000
   24.5467
  124.0000
   93.0000

See Also

| | | | | | |

Related Topics