Sort matrix according to first column in R

R

R Problem Overview


I have a matrix with two columns of the following form:

1 349
1 393
1 392
4 459
3 49
3 32
2 94

I would like to sort this matrix in increasing order based on the first column but I would like to keep the corresponding values in the second column.

The output would look like this:

1 349
1 393
1 392
2 94
3 49
3 32
4 459

R Solutions


Solution 1 - R

Read the data:

foo <- read.table(text="1 349
  1 393
  1 392
  4 459
  3 49
  3 32
  2 94")

And sort:

foo[order(foo$V1),]

This relies on the fact that order keeps ties in their original order. See ?order.

Solution 2 - R

Creating a data.table with key=V1 automatically does this for you. Using Stephan's data foo

> require(data.table)
> foo.dt <- data.table(foo, key="V1")
> foo.dt
   V1  V2
1:  1 349
2:  1 393
3:  1 392
4:  2  94
5:  3  49
6:  3  32
7:  4 459

Solution 3 - R

Be aware that if you want to have values in the reverse order, you can easily do so:

> example = matrix(c(1,1,1,4,3,3,2,349,393,392,459,49,32,94), ncol = 2)
> example[order(example[,1], decreasing = TRUE),]
     [,1] [,2]
[1,]    4  459
[2,]    3   49
[3,]    3   32
[4,]    2   94
[5,]    1  349
[6,]    1  393
[7,]    1  392

Solution 4 - R

If your data is in a matrix named foo, the line you would run is

foo.sorted=foo[order[foo[,1]]

Solution 5 - R

You do not need data.table.

This is what you need A[order(A[,1]), ], where A is the matrix of your data.

Solution 6 - R

The accepted answer works like a charm unless you're applying it to a vector. Since a vector is non-recursive, you'll get an error like this

$ operator is invalid for atomic vectors

You can use [ in that case

foo[order(foo["V1"]),]

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1723765View Question on Stackoverflow
Solution 1 - RStephan KolassaView Answer on Stackoverflow
Solution 2 - RArunView Answer on Stackoverflow
Solution 3 - RGabriel123View Answer on Stackoverflow
Solution 4 - RRyan OlsonView Answer on Stackoverflow
Solution 5 - RVassilis ChasiotisView Answer on Stackoverflow
Solution 6 - Rshubhamgoel27View Answer on Stackoverflow