2014-10-02 1 views
0

Я переводил код R в Python. В файле data.frame есть команда do.call, которая упорядочивает свои строки. Как это делается, меня смущает.Как do.call заказывает строки data.frame?

signary = matrix(c(1, 1, 1,-1,-1,-1, 
        0, 0, 0, 1,-1, 0, 
        0, 1,-1, 0, 0, 0, 
        1,-1,-1, 0, 0, 0, 
        0, 0, 0, 1, 1,-1), 
       ncol=5) 

do.call('order', as.data.frame(signary)) 

[1] 5 6 4 3 1 2 

Как делается упорядочение рядов?

Спасибо!

+0

Как вы узнали о оформлении заказа? –

+0

Матрица signary - это своего рода матрица, которая проходит через команду do.call (...). Столбцы в этой матрице могут быть взаимозаменяемыми, но не строками. Ранжи, заданные командой do.call (...), используются для упорядочивания меток. Я не уверен, отвечает ли он на ваш вопрос. Благодарю. – essicolo

ответ

2

Это упорядочивает строки по первому столбцу, затем по второму, затем по третьему. Если вы повторно-индекс по итогам do.call, вы получите

ii<-do.call('order', as.data.frame(signary)) 
signary[ii,] 

#  [,1] [,2] [,3] [,4] [,5] 
# [1,] -1 -1 0 0 1 
# [2,] -1 0 0 0 -1 
# [3,] -1 1 0 0 1 
# [4,] 1 0 -1 -1 0 
# [5,] 1 0 0 1 0 
# [6,] 1 0 1 -1 0 

Итак, сначала вы заказ по первой колонке, разрыв связей с колонкой 2, разрывом связей с колонкой 3 и т.д.

Заявление эквивалентно

ii<-order(signary[,1], signary[,2], signary[,3], signary[,4], signary[,5]) 
ii 
# [1] 5 6 4 3 1 2 
+0

Отлично. Я мог бы найти эквивалент Python, используя pandas sort_index: signary_df = pd.DataFrame (signary); ii = np.array (signary_df.sort_index (by = range (0, signary_df.shape [1]), по возрастанию = True). index) – essicolo