2013-12-11 3 views
1

У меня есть data.frame, как показано ниже:Индекс заказов в R

set.seed(2013) 
df <- data.frame(site = sample(c("A","B","C"), 10, replace = TRUE), 
       currency = sample(c("USD", "EUR", "GBP", "CNY", "CHF"),10, replace=TRUE, prob=c(10,6,5,6,0.5)), 
       value = sample(seq(1:10)/10,10,replace=FALSE)) 

Я хочу создать rank столбец, в котором перечислены порядок соответствующей строки по отношению к его value. Я пробовал sort() и order(), но они возвращают разные вещи. Как я могу получить желаемый результат, указанный в столбце «rank»?

df$order <- order(df$value) 
df$sort <- sort(df$value) 
df 

    site currency value order sort | rank 
1 B  USD  0.6  2  0.1 | 6 
2 C  USD  0.1  5  0.2 | 1 
3 C  CNY  0.9  6  0.3 | 9 
4 C  GBP  1.0  10 0.4 | 10 
5 A  CNY  0.2  8  0.5 | 2 
6 C  CNY  0.3  1  0.6 | 3 
7 C  GBP  0.8  9  0.7 | 8 
8 C  GBP  0.5  7  0.8 | 5 
9 C  USD  0.7  3  0.9 | 7 
10 C  USD  0.4  4  1.0 | 4 

ответ

1

Вы ищете rank() ...

rank(df$value) 
# [1] 6 1 9 10 2 3 8 5 7 4 

order() дает заказанные показатели вектора вы заказываете. Итак, если вы делаете order(df$value), вы получаете [1] 2 5 6 10 8 1 9 7 3 4, потому что второе значение df$value должно идти первым, пятое значение должно быть 2-го и так далее. Обычно вы используете его заказать вектор или data.frame в соответствии с некоторым атомным вектором, как так ...

df[ order(df$value) , ] 
# site currency value 
#2  C  USD 0.1 
#5  A  CNY 0.2 
#6  C  CNY 0.3 
#10 C  USD 0.4 
#8  C  GBP 0.5 
#1  B  USD 0.6 
+0

ох .. Очевидно, я видел это, но запутался по описанию R справочного файла: 'Возвращает выборочные ряды значения в векторе. Связи (т. Е. Равные значения) и отсутствующие значения могут обрабатываться несколькими способами. Я как-то предполагал, что это ранг линейной алгебры, должен был попробовать, прежде чем задавать вопрос! – Rhubarb

+0

@Berkan, это не будет первый раз, когда кто-то будет смущен документацией! (включая меня) :-) –

+1

Да, на самом деле я использовал одно и то же имя для столбца в моем вопросе, чувствуя себя довольно хромым, хотя :). – Rhubarb

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