我有一个包含以下形式的两列的矩阵:
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
我有一个包含以下形式的两列的矩阵:
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
读取数据:
foo <- read.table(text="1 349
1 393
1 392
4 459
3 49
3 32
2 94")
并排序:
foo[order(foo$V1),]
order
这依赖于使关系保持原始顺序的事实。见?order
。
创建一个data.table
withkey=V1
会自动为你做这件事。使用斯蒂芬的数据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
请注意,如果您想以相反的顺序获取值,您可以轻松地这样做:
> 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
如果您的数据位于名为 的矩阵中foo
,您将运行的行是
foo.sorted=foo[order[foo[,1]]
除非您将其应用于向量,否则接受的答案就像一个魅力。由于向量是非递归的,你会得到这样的错误
$ operator is invalid for atomic vectors
你可以[
在这种情况下使用
foo[order(foo["V1"]),]
你不需要data.table
。
这就是你需要的,你的数据矩阵在A[order(A[,1]), ]
哪里。A