Подтвердить что ты не робот

Сортировка матрицы по первому столбцу в 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
4b9b3361

Ответ 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.

Ответ 2

Создание 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

Ответ 3

Помните, что если вы хотите иметь значения в обратном порядке, вы можете легко сделать это:

> 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

Ответ 4

Если ваши данные находятся в матрице с именем foo, строка, которую вы запустите, будет

foo.sorted = Foo [заказать [Foo [1]]

Ответ 5

Принятый ответ работает как шарм, если вы не применяете его к вектору. Поскольку вектор не является рекурсивным, вы получите ошибку, подобную этой

$ operator is invalid for atomic vectors

В этом случае вы можете использовать [

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