2013-12-23 2 views
2

Для произвольной матрицы или dataframe x с любым числом столбцов, что я хочу сделать это:Сортировка dataframe ВСЕХ столбцов в R

x=x[order(x[,1], x[,2], ..., x[,ncol(x)]),] 

То есть, я хочу, чтобы отсортировать данные по первому столбцу, затем второй столбец, ..., затем по последнему столбцу. Расширенное обсуждение сортировки here, похоже, не содержит решения. Вот мое решение, которое нарушает fortune(106):

sortarray = function(x){ 
    k = ncol(x) 
    com = paste("x = x[order(x[,", paste(1:k, collapse = "],x[,"), "]),]", sep = "") 
    eval(parse(text = com)) 
    return(x)} 

x = sortarray(x) 

Это, кажется, работает хорошо, но не там уборщицей путь?

Редактировать для уточнения дедупликации: Этот вопрос отличается от его suggested duplicate важным (по крайней мере, для меня). Предыдущий вопрос касается ситуации, в которой вы явно указываете столбцы, которые хотите отсортировать. В моем случае я хочу, чтобы столбцы были выбраны автоматически (в частности, все из них), вместо того, чтобы мне вводить каждое имя столбца в команде заказа. Ответ ниже решил мою проблему, в отличие от любого ответа на предыдущий вопрос.

+0

Кажется, о код-обзора. http://codereview.stackexchange.com/ – m59

ответ

4
x[do.call(order, x), ] 

Попробуйте выполнить

example(order) 

в R строке.

Вопрос предварительно спросил здесь:

How to sort a dataframe by column(s)?

+0

Ницца! Предоставление решения на основе заголовка вопроса, но обратите внимание, что это также не работает, если 'x' является матрицей, как запрошено OP – zkurtz

+3

@zkurtz. Если вход представляет собой матрицу, конвертируйте с помощью' as.data.frame'. –

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