This article describes how to add an average...

...of specified rows to a table:

## Requirements

- A categorical table. In this example, we are averaging the Coke brand row percentages and creating a new row called
*Coke Average %*.

## Method

1. Select your table.

2. Go to **Automate > Custom Rule**.

3. Paste the below into the dialog:

includeWeb("JavaScript Array Functions");

form.setHeading('Creates an Average % of Specified Rows');

form.setSummary('Creates an Average % of Specified Rows');

// Get the list of statistics on the table.

var statistics = table.statistics;

// What is the last row in this span?

var last_row = table.numberRows - 1;

// Add a new Average row.

var row_name = "Coke Average %";

table.insertRowAfter(last_row, row_name);

// Remember the index of the new Average row.

var average_row = last_row + 1;

// Specify labels and statistic to use

var specified_labels = ["Coca-Cola", "Diet Coke", "Coke Zero"];

var statistic = "%";

// Check for duplicates in row labels / entered labels

var row_labels = table.rowLabels;

var dupe_check1 = arrayHasDuplicateElements(specified_labels);

var dupe_check2 = arrayHasDuplicateElements(row_labels);

if (dupe_check1)

form.ruleNotApplicable('the specified row labels have duplicates');

if (dupe_check2)

form.ruleNotApplicable('the table has duplicate row labels');

// For each row, sum its statistics.

// For each column...

for (var column = 0; column < table.numberColumns; column++) {

// For each statistic in the table...

for (var stat = 0; stat < statistics.length; stat++) {

var values = table.get(statistic);

var sum = 0;

var count = 0;

for (var row = 0; row < last_row+1; row++) {

if (specified_labels.indexOf(row_labels[row]) > -1) {

sum += values[row][column];

count++;

}

}

// Store the average in the new Average row.

values[average_row][column] = sum / count;

// Store the values of the Average row into the table.

table.set(statistics[stat], values);

}

}

- We first define the labels of the rows we wish to sum and the statistic to use.
- A validation check for rows with duplicate labels is performed.
- We use the
`insertRowAfter`

function to add the new row to the very end of the table. - We then loop through each column and sum the values of any rows with the specified labels.
- Finally, we use
`table.set`

to set the values for the new row.

4. OPTIONAL: Change *specified_labels* to include the table row labels you wish to use in the calculation.

5. OPTIONAL: Change *statistic* to the table statistic you wish to use in the calculation.

6. OPTIONAL: Change *row_name* to the name of the row that will store the average calculation.

7. Press the **Play** button **> Close** **>** **OK**.