# Sorting of Arrays in R Programming

**Prerequisite:** **R â€“ Array**

A vector is a uni-dimensional array, which is specified by a single dimension, length. A Vector can be created using the â€˜**c()**â€˜ function. A list of values is passed to the **c()** function to create a vector. Sorting can be done either in ascending order or descending. There are few things which should be kept in mind before sorting. They are as follows:

- Order in which sorting needs to be performed – Ascending/Descending.
- Sorting according to multiple column criteria.
- Handling missing and duplicate values during sorting. The analyst must decide what should be done with missing and duplicate values. The overall impact on the data should be considered before removing or replacing null values.

**Method 1: sort() function**

**sort()** function in R is used to sort a vector.** By default, it sorts a vector in increasing order**. To sort in descending order, add a “**decreasing**” parameter to the sort function.

Syntax:sort(name_of_vector, decreasing = TRUE)

Parameters:

name_of_vector:Vector to be sorted

decreasing:Boolean value to sort in descending order

**Example 1:**

## R

`# create a linear array` `arr <- ` `c` `(9, 8, 7, 6, 5, 4, 3, 2, 1)` `# use of sort function to sort array` `# by default it is sorted in increasing order` `sort` `(arr)` |

**Output:**

[1] 1 2 3 4 5 6 7 8 9

**Example 2:**

## R

`# create linear array` `arr <- ` `c` `(1, 2, 3, 4, 5, 6, 7, 8, 9)` `# use in built sort function` `# to sort in decreasing order` `sort` `(arr, decreasing = ` `TRUE` `)` |

**Output:**

[1] 9 8 7 6 5 4 3 2 1

Note:The major drawback of the sort() function is that it cannot sort data frames.

**Method 2: order() function**

To overcome the drawback in method 1, we use the **order()** function, which also sorts data frames according to the specified column. To sort in decreasing order add negative sign. Data can also be sorted with multiple criteria. Suppose if the age of two persons is the same then, we can sort them on the basis of their names i.e. lexicographically. See the below examples.

**Example 1:**

## R

`# define dataframe` `df <- ` `data.frame` `(` `"Age"` `= ` `c` `(12, 21, 15, 5, 25),` ` ` `"Name"` `= ` `c` `(` `"Johnny"` `, ` `"Glen"` `, ` `"Alfie"` `,` ` ` `"Jack"` `, ` `"Finch"` `))` `# sort the dataframe on the basis of` `# age column and store it in newdf` `newdf <- df[` `order` `(df$Age), ]` `# print sorted dataframe` `print` `(newdf)` |

**Output:**

Age Name 4 5 Jack 1 12 Johnny 3 15 Alfie 2 21 Glen 5 25 Finch

**Example 2:**

## R

`# define vector` `r = ` `c` `(10, 20, 30, 40, 50, 60)` `# sort in decreasing order` `order` `(-r)` |

**Output:**

[1] 6 5 4 3 2 1

**Example 3:**

## R

`# define dataframe` `df <- ` `data.frame` `(` `"Age"` `= ` `c` `(12, 21, 15, 12, 25, 12),` ` ` `"Name"` `= ` `c` `(` `"Johnny"` `, ` `"Glen"` `, ` `"Alfie"` `,` ` ` `"Jack"` `, ` `"Finch"` `, ` `"Aaron"` `))` `# sort the dataframe first on the basis of` `# Age and if age is same perform sort on Name` `newdf <- df[` `order` `(df$Age, df$Name), ]` `# print sorted dataframe` `print` `(newdf)` |

**Output:**

Age Name 6 12 Aaron 4 12 Jack 1 12 Johnny 3 15 Alfie 2 21 Glen 5 25 Finch

Note:The output above is the indices of numbers. For instance, 60 is the largest in vector and had index 6. Thus, 6 is displayed first.

**Method 3: Sorting array using the loop**

- Create a linear array, say arr
- Create a variable swap. If swap is false after traversing the entire array, it means the array is already sorted and break the loop
- Else, run loop and copy original array into another array, say newArr, and start comparing adjacent elements in the original array
- If the current element is smaller than the previous element, then copy the current element of arr into the previous position of newArr and the previous element of arr into the current position of newArr. The newArr now has swapped elements.
- Copy newArr to original array arr and make swap = TRUE.
- Repeat until arr is sorted

Below is the implementation of the above approach.

## R

`# create linear array` `arr <- ` `c` `(9, 4, 5, 4, 5, 6, 3, 2, 1)` `# repeat until break is encountered` `repeat` `{` ` ` `# create a variable swap` ` ` `swap = ` `FALSE` ` ` ` ` `# run loop from 2nd element till last element` ` ` `for ` `(i ` `in` `2:` `length` `(arr))` ` ` `{` ` ` `# copy original array into newArr` ` ` `newArr <- arr` ` ` `if ` `(arr[i - 1] > arr[i])` ` ` `{` ` ` `newArr[i - 1] <- arr[i]` ` ` `newArr[i] <- arr[i - 1]` ` ` `arr <- newArr` ` ` `swapped <- ` `TRUE` ` ` `}` ` ` `}` ` ` `if ` `(!swapped) {` `break` `}` `}` `print` `(arr)` |

**Output:**

[1] 1 2 3 4 4 5 5 6 9

**Method 4: **The use** of dplyr package**

dplyr package is easy to use and reliable. The package includes **arrange()** method to sort the data. See the below examples.

**Example 1:**

## R

`# install package dplyr` `install.packages` `(` `"dplyr"` `)` `# import library dplyr` `library` `(dplyr)` `# create dataframe` `df <- ` `data.frame` `(` `"Age"` `= ` `c` `(12, 21, 15, 5, 25),` ` ` `"Name"` `= ` `c` `(` `"Johnny"` `, ` `"Glen"` `, ` `"Alfie"` `,` ` ` `"Jack"` `, ` `"Finch"` `))` `# sort the dataframe on the basis of` `# age column using arrange method` `arrange` `(df,age)` |

**Output:**

Age Name 4 5 Jack 1 12 Johnny 3 15 Alfie 2 21 Glen 5 25 Finch