2013-10-08 3 views
1

имейте некоторые проблемы выяснение как это сделать.Сортировка dataframe по вектору r

Я хочу, чтобы сортировать dataframe по столбцу, содержащему факторы, которые совпадают с факторами, которые у меня есть в списке. Важно, чтобы код не менял порядок строк в каждом коэффициенте.

Идеи?

редактировать:

salmon <- c("red", 3,7, 5) 
bass <- c("red", 1,3,5) 
shrimp <- c("blue", 1, 4, 2) 
carp <- c("orange", 6, 6, 6) 

dfex <- data.frame(salmon, bass, shrimp, carp) 
dfex <- data.frame(t(dfex)) 

ordering <- c("blue", "orange", "red") 

поэтому идея здесь состоит в переупорядочивании dataframe с помощью заказа вектор

+2

[Воспроизводимый пример?] (Http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) –

+1

Да, я проголосовал. Вас попросили точно так же в вашем предыдущем вопросе - предоставить воспроизводимый пример. – Henrik

+0

пример включен – user2795569

ответ

7

Сочетание match() и order() должен это сделать.

dfex[order(match(dfex[[1]], ordering)), ] 

match() покажет вам позицию индекса каждого значения в первом столбце, как найти в ordering. И сортировка по этим позициям приведет к порядку, который будет соответствовать порядку ordering.

6

Во-первых, как вы строите свой фрейм данных немного сложнее. Вы можете сделать что-то вроде следующего вместо:

dfex <- data.frame(v1=c("salmon","shrimp","carp"), 
        v2=c("red","blue","orange"), 
        v3=c(3,1,6), 
        v4=c(7,4,6), 
        v5=c(5,2,6)) 

Тогда вы можете заказать кадр данных с использованием имен строк:

order <- c("blue", "orange", "red") 
rownames(dfex) <- dfex$v2 
dfex[order,]  

Что дает:

  v1  v2 v3 v4 v5 
blue shrimp blue 1 4 2 
orange carp orange 6 6 6 
red salmon red 3 7 5 
+2

Я думаю, что вы имели в виду 'rownames (dfex) <- dfex $ v2' right? –

+2

@Jilber Да, исправлено. Спасибо за указание на это. – juba

+0

Это работает, если у нас есть множители фактора, как в моем отредактированном примере? Я не могу заставить его работать на моем конце. – user2795569

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