我有一个矩阵,其中包含以下两种形式的列:
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
答案 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"]),]