2016-05-27 5 views
3

Мне было интересно, есть ли простой способ ранжирования значений в R с двумя критериями: один для основного рейтинга, а другой для ранжирования связей.Есть ли простой способ оценивать значения в R, используя два критерия (второй для связей)?

Например, предположим, что мы имеем следующие наборы номер:

a <- c(9,13,6,3,7,1,13) 
b <- c(1,4,3,6,5,7,2) 

Теперь предположим, что мы хотим, чтобы ранжировать a, используя информацию в b обрабатывать связи в rank(a), так что мы в конечном итоге, следующее :

> 5 7 3 2 4 1 6 

Есть ли простой способ получить это в R? Варианты в rank для решения проблем не помогают.

PS: есть аналогичный вопрос о rank и связях уже, но это не является дубликатом, так как это на самом деле не спрашивать то же самое, несмотря на его название предполагает так: Is there a simple way to rank on multiple criteria that preserves ties in R?

+0

Обход может состоять в том, чтобы добавить очень маленькое значение, пропорциональное 'b', например:' rank (a + b * sqrt (.Machine $ double.eps)) '. Конечно, это просто работает, если значения в 'a' достаточно разбросаны, чтобы не перетасовываться добавленным термином. – nicola

ответ

2

Если предположить, что все связи фактически сломана:

order(order(a, b)) 
#[1] 5 7 3 2 4 1 6 

Возможно, существуют более эффективные альтернативы.

+0

Это намного лучше, чем моя работа. Полагаю, это тоже довольно эффективно. – nicola

+0

@nicola Мне не нравится, что он заказывает дважды. Я думаю, что первый вызов 'order' может даже сделать результат внутренне как промежуточный шаг (я не смотрел на источник). – Roland

+0

@ Roland это * очень * простой, в хорошем состоянии! Благодарю. Поэтому я согласен с тем, что, вероятно, более эффективно реализовать пользовательскую команду 'order', поскольку она, вероятно, делает это уже в ее работе. Но пока, кажется, что это приемлемо для моего дела. Единственное: все сломанные связи вы имеете в виду, когда все связи не связываются снова в 'b'? – MAnd

 Смежные вопросы

  • Нет связанных вопросов^_^