# How to Create Frequency Tables in R

A fundamental aspect of data analysis is understanding the distribution of data values, especially when dealing with categorical variables. One of the common ways to achieve this is by creating a frequency table, which is a summary of the data set showing the frequency of each value. This article will provide a comprehensive guide on how to create frequency tables in R.

## The Importance of Frequency Tables

Frequency tables offer a way to summarize categorical data. They provide an organized overview of the frequencies (counts) of individual categories or groups of a variable. This helps us understand the distribution and frequency of different categories within a dataset. This ability to summarize and understand data makes frequency tables a fundamental tool in any data analyst’s toolkit.

## Creating Frequency Tables in R

To create a frequency table in R, the basic functions you can use are table(), prop.table(), xtabs(), or addmargins(). The choice depends on the specific requirement of the data analysis. You might also find libraries such as dplyr and plyr helpful as they provide additional functionality.

### The table() Function

The most straightforward way to create a frequency table in R is by using the table() function. Let’s use an example to demonstrate this:

# create a vector
my_vector <- c('apple', 'banana', 'apple', 'orange', 'banana', 'banana')

# create a frequency table
frequency_table <- table(my_vector)

# print the frequency table
print(frequency_table)

In this code snippet, a vector my_vector is created with some fruit names. The table() function is used to create a frequency table frequency_table for this vector. The output will be:

my_vector
apple banana orange
2      3      1 

This indicates that in our vector, ‘apple’ appears 2 times, ‘banana’ appears 3 times, and ‘orange’ appears once.

### The prop.table() Function

While table() gives the counts, if you need proportions instead, you can use the prop.table() function. This is especially useful when comparing distributions between different groups. Here’s how you can do it:

# create a frequency table
frequency_table <- table(my_vector)

# create a proportion table
proportion_table <- prop.table(frequency_table)

# print the proportion table
print(proportion_table)

The prop.table() function takes the frequency table and returns the proportions. The output will be:

my_vector
apple  banana  orange
0.3333333 0.5000000 0.1666667 

This tells us that ‘apple’ accounts for about 33.33% of the entries, ‘banana’ about 50%, and ‘orange’ about 16.67%.

### The xtabs() Function

The xtabs() function provides an extended cross-tabulation. This is useful when dealing with two categorical variables. Here is how you can use it:

# create a data frame
my_data <- data.frame(
"Fruit" = c('apple', 'banana', 'apple', 'orange', 'banana', 'banana'),
"Color" = c('red', 'yellow', 'red', 'orange', 'yellow', 'yellow')
)

# create a cross-table
cross_table <- xtabs(~ Fruit + Color, data = my_data)

# print the cross-table
print(cross_table)

The xtabs() function creates a cross-table from the Fruit and Color variables in the my_data data frame. The output will look like:

        Color
Fruit    orange red yellow
apple       0   2      0
banana      0   0      3
orange      1   0      0

This table helps us understand how the fruits are distributed with respect to their colors.

If you want to include a total (sum) row and column in the frequency table, you can use the addmargins() function. Here’s how you can use it:

# create a cross-table
cross_table <- xtabs(~ Fruit + Color, data = my_data)

# add margins to the cross-table

# print the cross-table with margins
print(cross_table_margins)

The addmargins() function adds a total row and column to the cross-table. The output will look like:

        Color
Fruit    orange red yellow Sum
apple       0   2      0   2
banana      0   0      3   3
orange      1   0      0   1
Sum         1   2      3   6

Now the table includes the total for each fruit and color.

### Using dplyr for Frequency Tables

While base R provides tools to create frequency tables, you can also use the dplyr package to achieve the same thing. The dplyr package provides various functions for data manipulation, including creating frequency tables.

Firstly, you need to install and load the dplyr package:

# install the package
install.packages("dplyr")

library(dplyr)

Now, let’s see how to create a frequency table using dplyr:

# create a data frame
my_data <- data.frame(
"Fruit" = c('apple', 'banana', 'apple', 'orange', 'banana', 'banana'),
"Color" = c('red', 'yellow', 'red', 'orange', 'yellow', 'yellow')
)

# create a frequency table
frequency_table <- my_data %>%
group_by(Fruit) %>%
summarise(Frequency = n())

# print the frequency table
print(frequency_table)

In this code, the group_by() function is used to group the data frame by ‘Fruit’. Then, the summarise() function is used to calculate the frequency of each group.

The output will look like:

# A tibble: 3 x 2
Fruit   Frequency
<fct>       <int>
1 apple           2
2 banana          3
3 orange          1

## Conclusion

Understanding the distribution of categorical variables in a dataset is fundamental to data analysis, and frequency tables are an essential tool for this purpose. This article has walked you through how to create frequency tables using different functions in R. These include table(), prop.table(), xtabs(), addmargins(), and dplyr.

Posted in RTagged