# Data Frame Merging in R (With Examples)

code
rtip
operations
Author

Steven P. Sanderson II, MPH

Published

April 8, 2024

# Introduction

Merging multiple data frames is a pivotal skill in data manipulation. Whether you’re handling small-scale datasets or large-scale ones, mastering the art of merging can significantly enhance your efficiency. In this tutorial, we’ll delve into various methods of merging data frames in R, using straightforward examples to demystify the process.

# Understanding the Data

Before we dive into merging data frames, let’s familiarize ourselves with the data at hand. We have a list named `random_list`, which comprises three samples (`sample1`, `sample2`, and `sample3`). Each sample consists of 50 random numbers generated from a normal distribution using the `rnorm()` function.

``````random_list <- list(
sample1 = rnorm(50),
sample2 = rnorm(50),
sample3 = rnorm(50)
)``````

## Method 1: Using `cbind()` and `rbind()`

One approach to merge data frames is by combining them column-wise using `cbind()` or row-wise using `rbind()`.

``````# Creating data frames from the list
df1 <- data.frame(ID = 1:50, Value = random_list\$sample1)
df2 <- data.frame(ID = 1:50, Value = random_list\$sample2)
df3 <- data.frame(ID = 1:50, Value = random_list\$sample3)

# Merging data frames column-wise
cbined_df <- cbind(df1, df2\$Value, df3\$Value)
``````  ID      Value  df2\$Value  df3\$Value
1  1 -0.8828435 -1.5116620  1.4729716
2  2  0.7371127  0.1140000  0.6455959
3  3  0.7611256  0.9740632 -0.2355084
4  4  2.0613462 -1.0748615 -0.4654242
5  5  0.1966095 -0.2415080  0.1059656
6  6  0.3217213 -1.3252347  0.9432906``````
``````# Merging data frames row-wise
rbined_df <- rbind(df1, df2, df3)
``````  ID      Value
1  1 -0.8828435
2  2  0.7371127
3  3  0.7611256
4  4  2.0613462
5  5  0.1966095
6  6  0.3217213``````

In the first example, `cbind()` combines `df1`, `df2`, and `df3` column-wise, creating a new data frame `combined_df`. In the second example, `rbind()` stacks `df1`, `df2`, and `df3` row-wise, appending the rows to create `combined_df`.

## Method 2: Using `purrr::map()` and `data.frame()`

With the `purrr` package, you can efficiently merge data frames within a list using `map()` and `data.frame()`.

``````library(purrr)

# Merging data frames within the list
merged_list <- map(random_list, data.frame)

# Combining data frames row-wise
combined_df <- do.call(rbind, merged_list)
``````             .x..i..
sample1.1 -0.8828435
sample1.2  0.7371127
sample1.3  0.7611256
sample1.4  2.0613462
sample1.5  0.1966095
sample1.6  0.3217213``````

Here, `map()` iterates over each element of `random_list` and converts them into data frames using `data.frame()`. Then, `do.call(rbind, merged_list)` combines the data frames row-wise, creating `combined_df`.

## Method 3: Using `purrr::map_df()`

Another `purrr` function, `map_df()`, directly merges data frames within a list, producing a single combined data frame.

``````# Merging data frames within the list
combined_df <- map_df(random_list, cbind)
``````# A tibble: 6 × 3
sample1[,1] sample2[,1] sample3[,1]
<dbl>       <dbl>       <dbl>
1      -0.883      -1.51        1.47
2       0.737       0.114       0.646
3       0.761       0.974      -0.236
4       2.06       -1.07       -0.465
5       0.197      -0.242       0.106
6       0.322      -1.33        0.943``````

By employing `map_df()` with `cbind`, we merge data frames within `random_list`, resulting in `combined_df`, which is a single merged data frame.

# Encouragement to Try on Your Own

Now that you’ve explored different methods of merging data frames in R, I encourage you to experiment with your datasets. Practice merging data frames using various columns and explore how different merge methods influence the resulting data frame. The more hands-on experience you gain, the more proficient you’ll become in data manipulation with R.

In conclusion, merging multiple data frames in R is a foundational skill for any data analyst or scientist. By understanding the principles behind various merge methods and experimenting with real datasets, you’ll enhance your data manipulation capabilities and streamline your workflow.

Happy coding!

# Bonus Section

One more method of this for you and I think I like this one the best. It’s very simple and adds the name of the list item as a value in a column.

``````stacked_list <- utils::stack(random_list)
``````      values     ind
1 -0.8828435 sample1
2  0.7371127 sample1
3  0.7611256 sample1
4  2.0613462 sample1
5  0.1966095 sample1
6  0.3217213 sample1``````

Here is yet another method to merge data frames in R. This method is simple and effective, providing a straightforward way to combine data frames within a list.

``````# Merging data frames within the list
mapped_list <- map(random_list, \(x) data.frame(x)) |>
list_rbind()
``````           x
1 -0.8828435
2  0.7371127
3  0.7611256
4  2.0613462
5  0.1966095
6  0.3217213``````

This next method comes courtesy of a reader who suggested using the `list2DF` function from base R. This method is concise and efficient, making it a valuable addition to your data manipulation toolkit.

``list2DF(random_list) |> head()``
``````     sample1    sample2    sample3
1 -0.8828435 -1.5116620  1.4729716
2  0.7371127  0.1140000  0.6455959
3  0.7611256  0.9740632 -0.2355084
4  2.0613462 -1.0748615 -0.4654242
5  0.1966095 -0.2415080  0.1059656
6  0.3217213 -1.3252347  0.9432906``````