If you’re working with data in R, one of the essential tasks is to organize and present your data in a structured format. Tables are a powerful way to display data, and in this guide, we’ll explore how to create tables in R. We’ll cover various aspects, including working with two-way tables, creating tables from data, and using different tools to manipulate and analyze the data within tables.

Two-Way Tables in R

Two-way tables are a fundamental tool for summarizing categorical data in R. They allow us to cross-tabulate two categorical variables and examine the relationship between them. In our example, we will use the “smoker.csv” dataset, which contains information about individuals’ smoking status and socioeconomic status (SES).

To begin, let’s load the dataset and get a summary of its contents:

smokerData <- read.csv(file='smoker.csv', sep=',', header=T)

The output will display the distribution of smoking status and SES in the dataset, categorized as “current,” “former,” “never,” and “High,” “Low,” “Middle” respectively.

Creating a Table from Data

To create a two-way table from raw data, we can use the table() function in R. In our case, we’ll create a table that displays the number of individuals for each combination of smoking status and SES:

smoke <- table(smokerData$Smoke, smokerData$SES)

This table will show the count of individuals in each category, making it easy to analyze the data and observe any patterns or trends.

Tools for Working with Tables

R provides several useful functions to work with tables and explore the data in various ways. Let’s delve into some of these tools:


The barplot() function is a handy tool to visualize two-way tables. It helps us understand the distribution of categories in each variable and how they interact. We can create a bar plot using the following code:

barplot(smoke, legend=T, beside=T, main='Smoking Status by SES')

This will generate a bar plot showing the distribution of smoking status based on socioeconomic status.


The prop.table() function allows us to calculate proportions from the two-way table. We can use it to determine the proportion of individuals in each category, making it easier to compare the distributions. Here’s how to use it:


This will give us a table of proportions, showing the percentage of individuals in each category for smoking status and SES.

Chi-Squared Test

The chi-squared test is a statistical test used to determine whether there is a significant association between two categorical variables. In R, we can perform a chi-squared test on our two-way table using the chisq.test() function:

result <- chisq.test(smoke)

The output will provide information about the test, including the chi-squared statistic, degrees of freedom, and p-value.

Creating a Table Directly

Sometimes, instead of having raw data, we may already have a table and need to create a table directly from it. We can achieve this by creating an array of numbers and then converting it into a table.

Let’s consider an example where we want to create a table similar to our previous one:

data <- c(51, 43, 22, 92, 28, 21, 68, 22, 9)
rows <- c("current", "former", "never")
cols <- c("High", "Low", "Middle")

smoke_direct <- matrix(data, ncol=3, byrow=TRUE)
colnames(smoke_direct) <- cols
rownames(smoke_direct) <- rows
smoke_direct <- as.table(smoke_direct)


This will give us a two-way table created directly from the data specified in the arrays.

Graphical Views of Tables

In addition to numerical analysis, we can also create graphical views of tables to better understand the data.

Mosaic Plot

The mosaicplot() function is an excellent way to visualize the relationships between two categorical variables. It creates a mosaic plot that displays the proportion of individuals in each category.

mosaicplot(smoke, main="Smokers", xlab="Status", ylab="Economic Class")

This will generate a mosaic plot showing the distribution of smoking status based on socioeconomic status, helping us visualize the associations.

Sorting and Direction

We can customize the mosaic plot further by specifying the sort and direction options. These options allow us to change the orientation of the plot and the ordering of the categories.

mosaicplot(smoke, sort=c(2,1))

This will create a mosaic plot with the vertical axis determining the primary proportion.

mosaicplot(smoke, dir=c("v", "h"))

This will create a mosaic plot with the vertical and horizontal axes swapped.


Tables are essential tools in data analysis and are commonly used to present categorical data. In this tutorial, we explored how to create two-way tables from raw data, as well as how to work with tables directly. We also learned about various tools to manipulate and analyze data within tables, including graphical views and statistical tests.

Understanding how to create and interpret tables in R will greatly enhance your data analysis skills, allowing you to gain valuable insights from your data. As you continue to work with R, you’ll find that tables are a versatile and powerful way to organize and visualize data effectively.


Can I create a table directly from existing data in R?

Yes, you can create a table directly from existing data in R. R provides various functions to create tables from raw data. One common approach is to use the table() function, which allows you to create a two-way table by cross-tabulating two categorical variables. Alternatively, you can create a table directly using the matrix() function and then convert it to a table using the as.table() function.

What tools are available for working with tables in R?

R offers several tools for working with tables, making it easier to manipulate and analyze data. Some of the essential tools include:

  • table() function: To create two-way tables from raw data.
  • prop.table() function: To calculate proportions from tables.
  • margin.table() function: To get marginal distributions of the data.
  • chisq.test() function: To perform the chi-squared test for table independence.
  • mosaicplot() function: To visualize two-way tables using mosaic plots.
  • barplot() function: To create bar plots for tables.
  • summary() function: To get summary statistics of the table.

How can I visualize tables in R using graphical views?

You can visualize tables in R using graphical views like mosaic plots and bar plots. For mosaic plots, you can use the mosaicplot() function, which displays the proportion of individuals in each category, making it easy to visualize the associations between two categorical variables. On the other hand, the barplot() function helps create bar plots that show the distribution of categories in each variable.

How do I manage data in R for table creation?

Managing data in R for table creation involves various steps, including importing data, cleaning and preprocessing it if needed, and organizing it in a suitable format for table creation. You can import data from various sources such as CSV files, Excel sheets, or databases using functions like read.csv(), read.table(), or specialized packages like readxl or readr. After importing, ensure that your data is in the right format (e.g., factors for categorical variables) to create tables directly using the table() function or by converting it to a matrix.

Are there any time data types used in R tables?

Yes, R provides specific data types for handling time-related data. The most common ones are Date and POSIXct (or POSIXlt). The Date class is used to represent calendar dates without time, while POSIXct represents dates and times with seconds precision. These data types are often used in tables when dealing with time-related data or when analyzing temporal patterns.

What are the steps to create a two-way table in R?

Creating a two-way table in R involves the following steps:

  1. Import or generate the data: Load the data into R using functions like read.csv() or create data directly in R.
  2. Organize data (if needed): Ensure that the variables you want to cross-tabulate are in the correct format (e.g., factors) for the table creation process.
  3. Use the table() function: Create the two-way table using the table() function, passing the two categorical variables as arguments.
  4. Optional: Use graphical views or statistical tests: Visualize the table using mosaicplot() or barplot() functions and perform a chi-squared test with chisq.test() to check for independence.

By following these steps, you can easily create and analyze two-way tables in R, helping you gain valuable insights from your data.


Opt out or Contact us anytime. See our Privacy Notice

Follow us on Reddit for more insights and updates.

Comments (0)

Welcome to A*Help comments!

We’re all about debate and discussion at A*Help.

We value the diverse opinions of users, so you may find points of view that you don’t agree with. And that’s cool. However, there are certain things we’re not OK with: attempts to manipulate our data in any way, for example, or the posting of discriminative, offensive, hateful, or disparaging material.

Your email address will not be published. Required fields are marked *


Register | Lost your password?