Ответ 1
Прочтите данные:
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 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
с помощью key=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 [заказать [Foo [1]]
Принятый ответ работает как шарм, если вы не применяете его к вектору. Поскольку вектор не является рекурсивным, вы получите ошибку, подобную этой
$ operator is invalid for atomic vectors
В этом случае вы можете использовать [
foo[order(foo["V1"]),]