2014-10-02 45 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

你是如何確定的順序? – 2014-10-02 19:40:14

+0

符號矩陣是一種通過do.call(...)命令的矩陣。矩陣中的列可以互換,但不可以交換。由do.call(...)命令給出的排名用於排序標籤。我不確定它是否回答你的問題。謝謝。 – essicolo 2014-10-02 19:45:52

回答

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

太好了。我可以使用pandas sort_index找到一個Python等價物:signary_df = pd.DataFrame(signary); ii = np.array(signary_df.sort_index(by = range(0,signary_df.shape [1]),升序= True).index) – essicolo 2014-10-03 19:25:01