How to Use dcast Function from data.table in R

Spread the love

The data.table package in R is known for its versatility, speed, and efficiency when it comes to data manipulation. Among its powerful set of functions is dcast, which allows you to reshape your data from ‘long’ format to ‘wide’ format in a highly efficient manner. This is an incredibly useful operation when you’re trying to get your data into a specific structure for analysis or visualization. In this article, we’ll delve into the depths of the dcast function, exploring its syntax, its arguments, and a variety of practical use-cases to help you master this powerful tool.


To follow along with the examples in this article, you’ll need to have R installed on your computer. If you haven’t yet installed the data.table package, you can do so by running the following command:


Load the data.table package into your R environment:


Basic Syntax

The basic syntax of the dcast function in R is as follows:

dcast(data, formula, fun.aggregate = NULL, ..., value.var = NULL)


  • data: The data.table you want to reshape.
  • formula: An object of class “formula” that specifies the shape of the resulting data.table.
  • fun.aggregate: An optional function to aggregate data. By default, it is set to NULL.
  • ...: Other arguments passed to methods.
  • value.var: The variable that will be used to fill in the values in the ‘wide’ format data table. By default, it is set to NULL.

Simple Example

Let’s consider a simple example where we have sales data for different products and different years:

# Create example data.table
sales_data <- data.table(
  Year = c(2019, 2019, 2020, 2020),
  Product = c("A", "B", "A", "B"),
  Sales = c(100, 200, 150, 250)

This data is currently in ‘long’ format. You can convert it to ‘wide’ format using dcast as follows:

dcast(sales_data, Year ~ Product, value.var = "Sales")

The result will be:

   Year   A   B
1: 2019 100 200
2: 2020 150 250

Aggregating Data

What if your ‘long’ data contains multiple observations for each combination of the variables specified in the formula? In such cases, you can use the fun.aggregate parameter to specify how to aggregate the data. Let’s consider an example:

# Create example data.table
sales_data <- data.table(
  Year = c(2019, 2019, 2019, 2020, 2020, 2020),
  Product = c("A", "A", "B", "A", "B", "B"),
  Sales = c(100, 150, 200, 120, 220, 230)

Here, we have multiple entries for each Year and Product combination. You can use sum as the aggregate function:

dcast(sales_data, Year ~ Product, fun.aggregate = sum, value.var = "Sales")

This would yield:

   Year   A   B
1: 2019 250 200
2: 2020 120 450

Multiple Value Variables

The dcast function also allows you to specify multiple value variables. Let’s say, in addition to Sales, we also have Profit:

# Create example data.table
sales_data <- data.table(
  Year = c(2019, 2020),
  Product = c("A", "B"),
  Sales = c(100, 200),
  Profit = c(40, 80)

You can reshape the data.table to include both Sales and Profit:

dcast(sales_data, Year ~ Product, value.var = c("Sales", "Profit"))

The result would be:

   Year Sales_A Sales_B Profit_A Profit_B
1: 2019     100      NA       40       NA
2: 2020      NA     200       NA       80

Multiple Aggregating Functions

You can also specify more than one aggregating function using the fun.aggregate parameter. For example, if you want both the sum and mean of Sales:

dcast(sales_data, Year ~ Product, fun.aggregate = list(sum, mean), value.var = "Sales")

Column Names and Factor Levels

You may encounter a situation where your column names or factor levels result in names that aren’t syntactically valid for column names in R. By default, dcast makes the column names syntactically valid. However, you can change this behavior using the variable.factor and make.names arguments.

Advanced: Reshaping Multiple Columns

Advanced users may find themselves in situations where they need to reshape multiple columns at once. The dcast function is flexible enough to handle these cases as well.


In summary, the dcast function from the data.table package in R is a powerful function for reshaping data.tables from ‘long’ format to ‘wide’ format. By understanding its syntax and the meaning of its parameters like formula, fun.aggregate, and value.var, you can perform a wide range of data reshaping operations with incredible speed and efficiency.

Posted in RTagged

Leave a Reply