порядок data.frame по нечисловому значению - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть data.frame, который выглядит следующим образом:

320    Dutch  A7     3

321    Dutch  A8     3

322    Dutch  A9     4

323    Dutch A10     1

324    Dutch A11     4

327    Dutch A14     4

325    Dutch A12     3

328    Dutch A15    10

326    Dutch A13     1

329    Dutch A16     3

Как я могу заказать это так, чтобы все A1, A2, etc. были расположены в алфавитном и числовом порядке, чтобы я получил:

320    Dutch  A7     3

321    Dutch  A8     3

322    Dutch  A9     4

323    Dutch A10     1

324    Dutch A11     4

325    Dutch A12     3

326    Dutch A13     1

327    Dutch A14     4

328    Dutch A15    10

329    Dutch A16     3

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Забудьте пока часть фрейма данных. Вот пример вектора, который вы хотите заказать

x <- paste(
  rep.int(LETTERS[1:3], 16),
  rep.int(1:16, 3),
  sep = ""
)
y <- sample(x)

Просто звонок sort(y) не сработает, потому что номер отсортирован в лексографическом порядке, поэтому вы получите что-то вроде A1, A10, A11, ...

Вместо этого используйте substring, чтобы разбить столбец на буквы и цифры.

indexer <- data.frame(
  letter = substring(y, 1, 1),
  number = as.numeric(substring(y, 2))
)

Затем, как предложил aL3xa, позвоните order, чтобы упорядочить результирующий кадр данных.

o <- with(indexer, order(letter, number))
y[o]

Чтобы заставить это работать с фреймом данных, просто замените y на your_data$index_column.

1 голос
/ 12 декабря 2011

Вы вроде ответили на свой вопрос. См. Справку для функции order. А также посмотрите эту напыщенную речь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...