Mastering Data Aggregation with xtabs() in R


Steven P. Sanderson II, MPH


June 20, 2023


As a programmer, you’re constantly faced with the task of organizing and analyzing data. One powerful tool in your R arsenal is the xtabs() function. In this blog post, we’ll explore the versatility and simplicity of xtabs() for aggregating data. We’ll use the mtcars dataset and the dataset to illustrate its functionality. Get ready to dive into the world of data aggregation with xtabs()!

Understanding xtabs()

The xtabs() function in R allows you to create contingency tables, which are a handy way to summarize data based on multiple factors or variables. It takes a formula-based approach and can handle both one-dimensional and multi-dimensional tables.


Example 1: Analyzing Car Performance with mtcars Dataset

Let’s start with the mtcars dataset, which contains information about various car models. Suppose we want to understand the distribution of cars based on the number of cylinders and the transmission type. We can use xtabs() to accomplish this:

# Create a contingency table using xtabs()
table_cars <- xtabs(~ cyl + am, data = mtcars)

# View the resulting table
cyl  0  1
  4  3  8
  6  4  3
  8 12  2

In this example, the formula ~ cyl + am specifies that we want to cross-tabulate the “cyl” (number of cylinders) variable with the “am” (transmission type) variable. The resulting table provides a clear breakdown of car counts based on these two factors.

The xtabs() function also allows you to specify the order of the variables in the formula. For example, the following formula would create the same contingency table as the previous formula, but the rows of the table would be ordered by the number of cylinders in the car:

xtabs(~am + cyl, data = mtcars)
am   4  6  8
  0  3  4 12
  1  8  3  2

Example 2: Analyzing Health Data with

Let’s now explore the dataset, which is a simulated administrative dataset. Suppose we’re interested in analyzing the distribution of patients’ insurance type based on their type of stay. Here’s how we can use xtabs() for this analysis:

# Load the dataset

# Create a contingency table using xtabs()
table_health <- xtabs(~ payer_grouping + ip_op_flag, data = healthyR_data)

# View the resulting table
payer_grouping       I     O
  ?                  1     0
  Blue Cross     10797 13560
  Commercial      3328  3239
  Compensation     787  1715
  Exchange Plans  1206  1194
  HMO             8113  9331
  Medicaid        7131  1646
  Medicaid HMO   15466 10018
  Medicare A     52621     1
  Medicare B       293 22270
  Medicare HMO   13572  5425
  No Fault        1713   645
  Self Pay        2089  1560

In this example, the formula ~ payer_grouping + ip_op_flag specifies that we want to cross-tabulate the “payer_grouping” variable with the “ip_op_flag” variable. By using xtabs(), we obtain a comprehensive summary of patients’ insurance type and their stay type.


The xtabs() function in R provides a straightforward and effective way to aggregate data into contingency tables. It allows you to explore the relationships between multiple variables and gain insights into your dataset. In this blog post, we’ve covered two examples using the mtcars and healthyR_data datasets. However, xtabs() can be applied to any dataset with categorical variables. Experiment with this powerful function, and unlock new possibilities for data analysis and exploration in your programming journey.

Happy coding with xtabs()!