# R Combine Rows

### Introduction

This is the tenth post in the series **Data Visualization With R**. In the previous post, we learnt how to add text annotations to plots. In this post, we will learn how to combine multiple plots. Often, it is useful to have multiple plots in the same frame as it allows us to get a comprehensive view of a particular variable or compare among different variables. The Graphics package offers two methods to combine multiple plots. `par()`

can be used to set graphical parameters regarding plot layout using the mfcol and mfrow arguments. `layout()`

serves the same purpose but offers more flexibility by allowing us to modify the height and width of rows and columns.

`par()`

allows us to customize the graphical parameters(title, axis, font, color, size) for a particular session. For combining multiple plots, we can use the graphical parameters mfrow and mfcol. These two parameters create a matrix of plots filled by rows and columns respectively. Let us combine plots using both the above parameters.

Option | Description | Arguments |
---|---|---|

mfrow | Fill by rows | Number of rows and columns |

mfcol | Fill by columns | Number of rows and columns |

- When a single column header is split across cells, merge the cells with mergerows or mergecols.E.g. If a column header 'Mean GDP' is split over two cells, where the top cell has the value 'Mean' and the bottom cell has the value 'GDP', then mergerows will combine them into a single cell with the value 'Mean GDP'. Mergerows keeps the top cell, and mergecols keeps the left-most cell.
- I am working with a dataset of client visits and am having a trouble concerning missing data. I'm trying to get unique clients but am getting multiple rows returned for some clients. The issue I'm having trouble with uses data like the following: Client Gender Race A M White A NA White B F African American B F NA How would I write over the NA based on client code?

# load data from last lecture load('./data/datasetsL04.Rda') # Sometimes we have multiple data frames we want to combine. There are typically # three ways to do this: (1) stack on top of each other, (2) place side-by-side, # or (3) merge together based on common variables. To combine data frames: with rows of second data frame added to those of the first one, you can use rbind function. R Combine Data Frames – Merge based on a common column(s) merge function is used to merge data frames. The syntax of merge function is: merge(x, y, by, by.x, by.y, sort = TRUE) where. Combine R Objects by Rows or Columns Description. Take a sequence of vector, matrix or data frames arguments and combine by columns or rows, respectively. There may be methods for other R classes. Usage cbind(.) rbind(.) Details. The functions cbind and rbind are generic, with methods for data frames. The data frame method will be used if an argument is a data frame and the rest are vectors or matrices.

mfrow combines plots filled by rows i.e it takes two arguments, the number of rows and number of columns and then starts filling the plots by row. Below is the syntax for mfrow.

Let us begin by combining 4 plots in 2 rows and 2 columns:

### Libraries, Code & Data

All the data sets used in this post can be found here and code can be downloaded from here.

### Case Study 1

Let us begin by combining 4 plots in 2 rows and 2 columns. The plots will be filled by rows as we are using the mfrow function:

### Case Study 2

Combine 2 plots in 1 row and 2 columns.

### Case Study 3

Combine 2 plots in 2 rows and 1 column.

### Case Study 4

Combine 3 plots in 1 row and 3 columns.

### Case Study 5

Combine 3 plots in 3 rows and 1 column.

### mfcol

mfcol combines plots filled by columns i.e it takes two arguments, the number of rows and number of columns and then starts filling the plots by columns. Below is the syntax for mfrow:

Let us begin by combining 4 plots in 2 rows and 2 columns:

#### Case Study 6

Combine 3 plots in 3 rows and 1 column.

### Special Cases

What happens if we specify lesser or more number of graphs? In the next two examples, we will specify lesser or more number of graphs than we ask the par() function to combine. Let us see what happens in such instances:

Case 1: Lesser number of graphs specifiedWe will specify that 4 plots need to be combined in 2 rows and 2 columns but provide only 3 graphs.

Case 2: Extra graph specifiedWe will specify that 4 plots need to be combined in 2 rows and 2 columns but specify 6 graphs instead of 4.

### Case Study 8

### Layout

At the core of the layout() function is a matrix. We communicate the structure in which the plots must be combined using a matrix. As such, the layout function is more flexible compared to the par() function.

Option | Description | Value |
---|---|---|

matrix | matrix specifying location of plants | matrix |

widths | width of columns | vector |

heights | height of rows | vector |

Let us begin by combining 4 plots in a 2 row/2 column structure. We do this by creating a layout using the matrix function.

### Case Study 1

Combine 4 plots in 2 rows/2 columns filled by rows.

### Case Study 2

Combine 4 plots in 2 rows/2 columns filled by columns

To fill the plots by column, we specify byrow = FALSE in the matrix.

### Case Study 3

Combine 3 plots in 2 rows/2 columns filled by rows

The magic of the layout() function begins here. We want to combine 3 plots and the first plot should occupy both the columns in row 1 and the next 2 plots should be in row 2. If you look at the matrix below, 1 is specified twice and since the matrix is filled by row, it will occupy both the columns in the first row. Similarly the first plot will occupy the entire first row. It will be crystal clear when you see the plot.

### Case Study 4

Combine 3 plots in 2 rows/2 columns filled by rows

The plots must be filled by rows and the third plot must occupy both the columns of the second row while the other two plots will be placed in the first row. The matrix would look like this:

### Case Study 5

Combine 3 plots in 2 rows/2 columns filled by columns

The plots must be filled by columns and the first plot must occupy both the rows of the first column while the other two plots will be placed in the second column in two rows. The matrix would look like this:

### Case Study 6

Combine 3 plots in 2 rows/2 columns filled by columns

The plots must be filled by columns and the first plot must occupy both the rows of the second column while the other two plots will be placed in the first column in two rows. The matrix would look like this:

### Widths

In all the layouts created so far, we have kept the size of the rows and columns equal. What if you want to modify the width and height of the columns and rows? The widths and heights arguments in the layout() function address the above mentioned issue. Let us check them out one by one: The widths argument is used for specifying the width of the columns. Based on the number of columns in the layout, you can specify the width of each column. Let us look at some examples.

### Case Study 7

Width of the 2nd column is twice the width of the 1st column

### Case Study 8

Width of the 2nd column is twice that of the first and last column

### Heights

The heights arguments is used to modify the height of the rows and based on the number of rows specified in the layout, we can specify the height of each row.

### Case Study 9

## R Combine Rows Worksheet

Height of the 2nd row is twice that of the first row

## R Combine Rows In Data Frame

### Putting it all together…

Before we end this section, let us combine plots using both the widths and heights option

The merge() function is very useful to join two data sets together especially using a common variable (column).

The function offers several arguments to be used which makes it flexible in many ways. But one important and lacking feature is preserving the order of the rows.

There are two popular ways to account for this and result in a merged data set with the same row order as one of the original data sets.

## R Merge By Row Names

**The first is an ad-hoc solution.**

This solution depends on an extra id column that is used to re-order the merged data set.

Consider two data frames df_1 and df_2 with a common column “label”. The process goes as follows:

The resultant data set is now the two data sets merged with the same row order of the original data set df_1.

Of course, you can add the “id” column to either of the data frames, depending on the situation.

**The second option is using another R function, the join() function.**

This function solves the order problem that merge() doesn’t but is not as feature-rich as merge is. It is though as simple to use. Of course do not forget to load the Plyr library:

Reference: ' target='_blank'>R – Merging two data frames while keeping the original row order, StackOverflow