Calculations on Tables

This example shows how to perform calculations on tables.

The functions rowfun and varfun each apply a specified function to a table, yet many other functions require numeric or homogeneous arrays as input arguments. You can extract data from individual variables using dot indexing or from one or more variables using curly braces. The extracted data is then an array that you can use as input to other functions.

Read Sample Data into Table

Read data from a comma-separated text file, testScores.csv, into a table using the readtable function. testScores.csv contains test scores for several students. Use the student names in the first column of the text file as row names in the table.

T = readtable('testScores.csv','ReadRowNames',true)
T=10×4 table
                  Gender      Test1    Test2    Test3
                __________    _____    _____    _____

    HOWARD      {'male'  }     90       87       93  
    WARD        {'male'  }     87       85       83  
    TORRES      {'male'  }     86       85       88  
    PETERSON    {'female'}     75       80       72  
    GRAY        {'female'}     89       86       87  
    RAMIREZ     {'female'}     96       92       98  
    JAMES       {'male'  }     78       75       77  
    WATSON      {'female'}     91       94       92  
    BROOKS      {'female'}     86       83       85  
    KELLY       {'male'  }     79       76       82  

T is a table with 10 rows and four variables.

Summarize the Table

View the data type, description, units, and other descriptive statistics for each variable by using the summary function to summarize the table.

summary(T)
Variables:

    Gender: 10x1 cell array of character vectors

    Test1: 10x1 double

        Values:

            Min           75  
            Median      86.5  
            Max           96  

    Test2: 10x1 double

        Values:

            Min          75   
            Median       85   
            Max          94   

    Test3: 10x1 double

        Values:

            Min          72   
            Median       86   
            Max          98   

The summary contains the minimum, median, and maximum score for each test.

Find the Average Across Each Row

Extract the data from the second, third, and fourth variables using curly braces, {}, find the average of each row, and store it in a new variable, TestAvg.

T.TestAvg = mean(T{:,2:end},2)
T=10×5 table
                  Gender      Test1    Test2    Test3    TestAvg
                __________    _____    _____    _____    _______

    HOWARD      {'male'  }     90       87       93          90 
    WARD        {'male'  }     87       85       83          85 
    TORRES      {'male'  }     86       85       88      86.333 
    PETERSON    {'female'}     75       80       72      75.667 
    GRAY        {'female'}     89       86       87      87.333 
    RAMIREZ     {'female'}     96       92       98      95.333 
    JAMES       {'male'  }     78       75       77      76.667 
    WATSON      {'female'}     91       94       92      92.333 
    BROOKS      {'female'}     86       83       85      84.667 
    KELLY       {'male'  }     79       76       82          79 

Alternatively, you can use the variable names, T{:,{'Test1','Test2','Test3'}} or the variable indices, T{:,2:4} to select the subset of data.

Compute Statistics Using Grouping Variable

Compute the mean and maximum of TestAvg by gender of the students.

varfun(@mean,T,'InputVariables','TestAvg',...
       'GroupingVariables','Gender')
ans=2×3 table
      Gender      GroupCount    mean_TestAvg
    __________    __________    ____________

    {'female'}        5            87.067   
    {'male'  }        5              83.4   

Replace Data Values

The maximum score for each test is 100. Use curly braces to extract the data from the table and convert the test scores to a 25 point scale.

T{:,2:end} = T{:,2:end}*25/100
T=10×5 table
                  Gender      Test1    Test2    Test3    TestAvg
                __________    _____    _____    _____    _______

    HOWARD      {'male'  }     22.5    21.75    23.25      22.5 
    WARD        {'male'  }    21.75    21.25    20.75     21.25 
    TORRES      {'male'  }     21.5    21.25       22    21.583 
    PETERSON    {'female'}    18.75       20       18    18.917 
    GRAY        {'female'}    22.25     21.5    21.75    21.833 
    RAMIREZ     {'female'}       24       23     24.5    23.833 
    JAMES       {'male'  }     19.5    18.75    19.25    19.167 
    WATSON      {'female'}    22.75     23.5       23    23.083 
    BROOKS      {'female'}     21.5    20.75    21.25    21.167 
    KELLY       {'male'  }    19.75       19     20.5     19.75 

Change Variable Name

Change the variable name from TestAvg to Final.

T.Properties.VariableNames{end} = 'Final'
T=10×5 table
                  Gender      Test1    Test2    Test3    Final 
                __________    _____    _____    _____    ______

    HOWARD      {'male'  }     22.5    21.75    23.25      22.5
    WARD        {'male'  }    21.75    21.25    20.75     21.25
    TORRES      {'male'  }     21.5    21.25       22    21.583
    PETERSON    {'female'}    18.75       20       18    18.917
    GRAY        {'female'}    22.25     21.5    21.75    21.833
    RAMIREZ     {'female'}       24       23     24.5    23.833
    JAMES       {'male'  }     19.5    18.75    19.25    19.167
    WATSON      {'female'}    22.75     23.5       23    23.083
    BROOKS      {'female'}     21.5    20.75    21.25    21.167
    KELLY       {'male'  }    19.75       19     20.5     19.75

See Also

| | | | |

Related Topics