Sort matrix according to first column in R

后端 未结 5 1373
抹茶落季
抹茶落季 2020-12-07 17:50

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 increasi

相关标签:
5条回答
  • 2020-12-07 18:11

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

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

    0 讨论(0)
  • 2020-12-07 18:13

    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
    
    0 讨论(0)
  • 2020-12-07 18:15

    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"]),]
    
    0 讨论(0)
  • 2020-12-07 18:16

    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.

    0 讨论(0)
  • 2020-12-07 18:20

    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
    
    0 讨论(0)
提交回复
热议问题