根据R中的第一列对矩阵进行排序

时间:2013-01-16 13:37:01

标签: r

我有一个矩阵,其中包含以下两种形式的列:

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

我想根据第一列按递增顺序对此矩阵进行排序,但我希望在第二列中保留相应的值。

输出如下:

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

5 个答案:

答案 0 :(得分:44)

阅读数据:

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

并排序:

foo[order(foo$V1),]

这取决于order保持原始顺序的关系。请参阅?order

答案 1 :(得分:12)

使用data.table创建key=V1会自动为您执行此操作。使用Stephan的数据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

答案 2 :(得分:4)

请注意,如果您希望以相反的顺序获取值,则可以轻松执行此操作:

> 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

答案 3 :(得分:1)

如果您的数据位于名为foo的矩阵中,则您将运行的行为

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

答案 4 :(得分:0)

除非您将其应用于向量,否则可接受的答案就像一个超级按钮一样工作。由于向量是非递归的,因此您会得到这样的错误

$ operator is invalid for atomic vectors

在这种情况下,您可以使用[

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